aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBill Meier <wmeier@newsguy.com>2012-02-21 02:02:11 +0000
committerBill Meier <wmeier@newsguy.com>2012-02-21 02:02:11 +0000
commit63e31768817d2cfdbaeba77f73c85f5eb98dd1ff (patch)
treeb58d73be26870d2a5136951cc566e398e267bd10
parent1f807cc26a675952bb36f594731d9a7458f166b9 (diff)
Always test tvb_reported_length_remaining() return val for '> 0' instead of '!=0'
Also: Whitespace cleanup. svn path=/trunk/; revision=41094
-rw-r--r--epan/dissectors/packet-bacapp.c14734
1 files changed, 7365 insertions, 7369 deletions
diff --git a/epan/dissectors/packet-bacapp.c b/epan/dissectors/packet-bacapp.c
index d199e8f104..5824b0586b 100644
--- a/epan/dissectors/packet-bacapp.c
+++ b/epan/dissectors/packet-bacapp.c
@@ -4,7 +4,7 @@
* Enhanced by Steve Karg, 2005, <skarg[AT]users.sourceforge.net>, Atlanta
* Enhanced by Herbert Lischka, 2005, <lischka[AT]kieback-peter.de>, Berlin
* Enhanced by Felix Kraemer, 2010, <sauter-cumulus[AT]de.sauter-bc.com>,
- * Sauter-Cumulus GmbH, Freiburg
+ * Sauter-Cumulus GmbH, Freiburg
*
* $Id$
*
@@ -12,8 +12,6 @@
* By Gerald Combs <gerald[AT]wireshark.org>
* Copyright 1998 Gerald Combs
*
- * Copied from README.developer,v 1.23
- *
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
@@ -46,20 +44,20 @@ static int bacapp_tap = -1;
/* formerly bacapp.h contains definitions and forward declarations */
#ifndef FAULT
-#define FAULT proto_tree_add_text(subtree, tvb, offset, tvb_length(tvb) - offset, "something is going wrong here !!"); \
- offset = tvb_length(tvb);
+#define FAULT proto_tree_add_text(subtree, tvb, offset, tvb_length(tvb) - offset, "something is going wrong here !!"); \
+ offset = tvb_length(tvb);
#endif
/* BACnet PDU Types */
-#define BACAPP_TYPE_CONFIRMED_SERVICE_REQUEST 0
+#define BACAPP_TYPE_CONFIRMED_SERVICE_REQUEST 0
#define BACAPP_TYPE_UNCONFIRMED_SERVICE_REQUEST 1
-#define BACAPP_TYPE_SIMPLE_ACK 2
-#define BACAPP_TYPE_COMPLEX_ACK 3
-#define BACAPP_TYPE_SEGMENT_ACK 4
-#define BACAPP_TYPE_ERROR 5
-#define BACAPP_TYPE_REJECT 6
-#define BACAPP_TYPE_ABORT 7
-#define MAX_BACAPP_TYPE 8
+#define BACAPP_TYPE_SIMPLE_ACK 2
+#define BACAPP_TYPE_COMPLEX_ACK 3
+#define BACAPP_TYPE_SEGMENT_ACK 4
+#define BACAPP_TYPE_ERROR 5
+#define BACAPP_TYPE_REJECT 6
+#define BACAPP_TYPE_ABORT 7
+#define MAX_BACAPP_TYPE 8
#define BACAPP_SEGMENTED_REQUEST 0x08
#define BACAPP_MORE_SEGMENTS 0x04
@@ -88,18 +86,18 @@ dissect_bacapp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
/**
* ConfirmedRequest-PDU ::= SEQUENCE {
- * pdu-type [0] Unsigned (0..15), -- 0 for this PDU Type
- * segmentedMessage [1] BOOLEAN,
- * moreFollows [2] BOOLEAN,
- * segmented-response-accepted [3] BOOLEAN,
- * reserved [4] Unsigned (0..3), -- must be set zero
- * max-segments-accepted [5] Unsigned (0..7), -- as per 20.1.2.4
- * max-APDU-length-accepted [5] Unsigned (0..15), -- as per 20.1.2.5
- * invokeID [6] Unsigned (0..255),
- * sequence-number [7] Unsigned (0..255) OPTIONAL, -- only if segmented msg
- * proposed-window-size [8] Unsigned (0..127) OPTIONAL, -- only if segmented msg
- * service-choice [9] BACnetConfirmedServiceChoice,
- * service-request [10] BACnet-Confirmed-Service-Request OPTIONAL
+ * pdu-type [0] Unsigned (0..15), -- 0 for this PDU Type
+ * segmentedMessage [1] BOOLEAN,
+ * moreFollows [2] BOOLEAN,
+ * segmented-response-accepted [3] BOOLEAN,
+ * reserved [4] Unsigned (0..3), -- must be set zero
+ * max-segments-accepted [5] Unsigned (0..7), -- as per 20.1.2.4
+ * max-APDU-length-accepted [5] Unsigned (0..15), -- as per 20.1.2.5
+ * invokeID [6] Unsigned (0..255),
+ * sequence-number [7] Unsigned (0..255) OPTIONAL, -- only if segmented msg
+ * proposed-window-size [8] Unsigned (0..127) OPTIONAL, -- only if segmented msg
+ * service-choice [9] BACnetConfirmedServiceChoice,
+ * service-request [10] BACnet-Confirmed-Service-Request OPTIONAL
* }
* @param tvb
* @param pinfo
@@ -122,14 +120,14 @@ fConfirmedRequestPDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint
*/
static guint
fStartConfirmed(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset, guint8 ack,
- gint *svc, proto_item **tt);
+ gint *svc, proto_item **tt);
/**
* Unconfirmed-Request-PDU ::= SEQUENCE {
- * pdu-type [0] Unsigned (0..15), -- 1 for this PDU type
- * reserved [1] Unsigned (0..15), -- must be set zero
- * service-choice [2] BACnetUnconfirmedServiceChoice,
- * service-request [3] BACnetUnconfirmedServiceRequest -- Context-specific tags 0..3 are NOT used in header encoding
+ * pdu-type [0] Unsigned (0..15), -- 1 for this PDU type
+ * reserved [1] Unsigned (0..15), -- must be set zero
+ * service-choice [2] BACnetUnconfirmedServiceChoice,
+ * service-request [3] BACnetUnconfirmedServiceRequest -- Context-specific tags 0..3 are NOT used in header encoding
* }
* @param tvb
* @param pinfo
@@ -142,10 +140,10 @@ fUnconfirmedRequestPDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guin
/**
* SimpleACK-PDU ::= SEQUENCE {
- * pdu-type [0] Unsigned (0..15), -- 2 for this PDU type
- * reserved [1] Unsigned (0..15), -- must be set zero
- * invokeID [2] Unsigned (0..255),
- * service-ACK-choice [3] BACnetUnconfirmedServiceChoice -- Context-specific tags 0..3 are NOT used in header encoding
+ * pdu-type [0] Unsigned (0..15), -- 2 for this PDU type
+ * reserved [1] Unsigned (0..15), -- must be set zero
+ * invokeID [2] Unsigned (0..255),
+ * service-ACK-choice [3] BACnetUnconfirmedServiceChoice -- Context-specific tags 0..3 are NOT used in header encoding
* }
* @param tvb
* @param pinfo
@@ -158,15 +156,15 @@ fSimpleAckPDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
/**
* ComplexACK-PDU ::= SEQUENCE {
- * pdu-type [0] Unsigned (0..15), -- 3 for this PDU Type
- * segmentedMessage [1] BOOLEAN,
- * moreFollows [2] BOOLEAN,
- * reserved [3] Unsigned (0..3), -- must be set zero
- * invokeID [4] Unsigned (0..255),
- * sequence-number [5] Unsigned (0..255) OPTIONAL, -- only if segmented msg
- * proposed-window-size [6] Unsigned (0..127) OPTIONAL, -- only if segmented msg
- * service-ACK-choice [7] BACnetConfirmedServiceChoice,
- * service-ACK [8] BACnet-Confirmed-Service-Request -- Context-specific tags 0..8 are NOT used in header encoding
+ * pdu-type [0] Unsigned (0..15), -- 3 for this PDU Type
+ * segmentedMessage [1] BOOLEAN,
+ * moreFollows [2] BOOLEAN,
+ * reserved [3] Unsigned (0..3), -- must be set zero
+ * invokeID [4] Unsigned (0..255),
+ * sequence-number [5] Unsigned (0..255) OPTIONAL, -- only if segmented msg
+ * proposed-window-size [6] Unsigned (0..127) OPTIONAL, -- only if segmented msg
+ * service-ACK-choice [7] BACnetConfirmedServiceChoice,
+ * service-ACK [8] BACnet-Confirmed-Service-Request -- Context-specific tags 0..8 are NOT used in header encoding
* }
* @param tvb
* @param pinfo
@@ -179,13 +177,13 @@ fComplexAckPDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset
/**
* SegmentACK-PDU ::= SEQUENCE {
- * pdu-type [0] Unsigned (0..15), -- 4 for this PDU Type
- * reserved [1] Unsigned (0..3), -- must be set zero
- * negative-ACK [2] BOOLEAN,
- * server [3] BOOLEAN,
- * original-invokeID [4] Unsigned (0..255),
- * sequence-number [5] Unsigned (0..255),
- * actual-window-size [6] Unsigned (0..127)
+ * pdu-type [0] Unsigned (0..15), -- 4 for this PDU Type
+ * reserved [1] Unsigned (0..3), -- must be set zero
+ * negative-ACK [2] BOOLEAN,
+ * server [3] BOOLEAN,
+ * original-invokeID [4] Unsigned (0..255),
+ * sequence-number [5] Unsigned (0..255),
+ * actual-window-size [6] Unsigned (0..127)
* }
* @param tvb
* @param pinfo
@@ -198,11 +196,11 @@ fSegmentAckPDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset
/**
* Error-PDU ::= SEQUENCE {
- * pdu-type [0] Unsigned (0..15), -- 5 for this PDU Type
- * reserved [1] Unsigned (0..3), -- must be set zero
- * original-invokeID [2] Unsigned (0..255),
- * error-choice [3] BACnetConfirmedServiceChoice,
- * error [4] BACnet-Error
+ * pdu-type [0] Unsigned (0..15), -- 5 for this PDU Type
+ * reserved [1] Unsigned (0..3), -- must be set zero
+ * original-invokeID [2] Unsigned (0..255),
+ * error-choice [3] BACnetConfirmedServiceChoice,
+ * error [4] BACnet-Error
* }
* @param tvb
* @param pinfo
@@ -215,10 +213,10 @@ fErrorPDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset);
/**
* Reject-PDU ::= SEQUENCE {
- * pdu-type [0] Unsigned (0..15), -- 6 for this PDU Type
- * reserved [1] Unsigned (0..3), -- must be set zero
- * original-invokeID [2] Unsigned (0..255),
- * reject-reason [3] BACnetRejectReason
+ * pdu-type [0] Unsigned (0..15), -- 6 for this PDU Type
+ * reserved [1] Unsigned (0..3), -- must be set zero
+ * original-invokeID [2] Unsigned (0..255),
+ * reject-reason [3] BACnetRejectReason
* }
* @param tvb
* @param pinfo
@@ -231,11 +229,11 @@ fRejectPDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset);
/**
* Abort-PDU ::= SEQUENCE {
- * pdu-type [0] Unsigned (0..15), -- 7 for this PDU Type
- * reserved [1] Unsigned (0..3), -- must be set zero
- * server [2] BOOLEAN,
- * original-invokeID [3] Unsigned (0..255),
- * abort-reason [4] BACnetAbortReason
+ * pdu-type [0] Unsigned (0..15), -- 7 for this PDU Type
+ * reserved [1] Unsigned (0..3), -- must be set zero
+ * server [2] BOOLEAN,
+ * original-invokeID [3] Unsigned (0..255),
+ * abort-reason [4] BACnetAbortReason
* }
* @param tvb
* @param pinfo
@@ -342,12 +340,12 @@ fConfirmedServiceAck (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint
/**
* AcknowledgeAlarm-Request ::= SEQUENCE {
- * acknowledgingProcessIdentifier [0] Unsigned32,
- * eventObjectIdentifier [1] BACnetObjectIdentifer,
- * eventStateAcknowledge [2] BACnetEventState,
- * timeStamp [3] BACnetTimeStamp,
- * acknowledgementSource [4] Character String,
- * timeOfAcknowledgement [5] BACnetTimeStamp
+ * acknowledgingProcessIdentifier [0] Unsigned32,
+ * eventObjectIdentifier [1] BACnetObjectIdentifer,
+ * eventStateAcknowledge [2] BACnetEventState,
+ * timeStamp [3] BACnetTimeStamp,
+ * acknowledgementSource [4] Character String,
+ * timeOfAcknowledgement [5] BACnetTimeStamp
* }
* @param tvb
* @param pinfo
@@ -360,11 +358,11 @@ fAcknowledgeAlarmRequest (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, g
/**
* ConfirmedCOVNotification-Request ::= SEQUENCE {
- * subscriberProcessIdentifier [0] Unsigned32,
- * initiatingDeviceIdentifier [1] BACnetObjectIdentifer,
- * monitoredObjectIdentifier [2] BACnetObjectIdentifer,
- * timeRemaining [3] unsigned,
- * listOfValues [4] SEQUENCE OF BACnetPropertyValues
+ * subscriberProcessIdentifier [0] Unsigned32,
+ * initiatingDeviceIdentifier [1] BACnetObjectIdentifer,
+ * monitoredObjectIdentifier [2] BACnetObjectIdentifer,
+ * timeRemaining [3] unsigned,
+ * listOfValues [4] SEQUENCE OF BACnetPropertyValues
* }
* @param tvb
* @param pinfo
@@ -377,19 +375,19 @@ fConfirmedCOVNotificationRequest (tvbuff_t *tvb, packet_info *pinfo, proto_tree
/**
* ConfirmedEventNotification-Request ::= SEQUENCE {
- * ProcessIdentifier [0] Unsigned32,
- * initiatingDeviceIdentifier [1] BACnetObjectIdentifer,
- * eventObjectIdentifier [2] BACnetObjectIdentifer,
- * timeStamp [3] BACnetTimeStamp,
- * notificationClass [4] unsigned,
- * priority [5] unsigned8,
- * eventType [6] BACnetEventType,
- * messageText [7] CharacterString OPTIONAL,
- * notifyType [8] BACnetNotifyType,
- * ackRequired [9] BOOLEAN OPTIONAL,
- * fromState [10] BACnetEventState OPTIONAL,
- * toState [11] BACnetEventState,
- * eventValues [12] BACnetNotificationParameters OPTIONAL
+ * ProcessIdentifier [0] Unsigned32,
+ * initiatingDeviceIdentifier [1] BACnetObjectIdentifer,
+ * eventObjectIdentifier [2] BACnetObjectIdentifer,
+ * timeStamp [3] BACnetTimeStamp,
+ * notificationClass [4] unsigned,
+ * priority [5] unsigned8,
+ * eventType [6] BACnetEventType,
+ * messageText [7] CharacterString OPTIONAL,
+ * notifyType [8] BACnetNotifyType,
+ * ackRequired [9] BOOLEAN OPTIONAL,
+ * fromState [10] BACnetEventState OPTIONAL,
+ * toState [11] BACnetEventState,
+ * eventValues [12] BACnetNotificationParameters OPTIONAL
* }
* @param tvb
* @param pinfo
@@ -402,9 +400,9 @@ fConfirmedEventNotificationRequest (tvbuff_t *tvb, packet_info *pinfo, proto_tr
/**
* GetAlarmSummary-ACK ::= SEQUENCE OF SEQUENCE {
- * objectIdentifier BACnetObjectIdentifer,
- * alarmState BACnetEventState,
- * acknowledgedTransitions BACnetEventTransitionBits
+ * objectIdentifier BACnetObjectIdentifer,
+ * alarmState BACnetEventState,
+ * acknowledgedTransitions BACnetEventTransitionBits
* }
* @param tvb
* @param pinfo
@@ -417,25 +415,25 @@ fGetAlarmSummaryAck (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint
/**
* GetEnrollmentSummary-Request ::= SEQUENCE {
- * acknowledgmentFilter [0] ENUMERATED {
- * all (0),
- * acked (1),
- * not-acked (2)
+ * acknowledgmentFilter [0] ENUMERATED {
+ * all (0),
+ * acked (1),
+ * not-acked (2)
* },
- * enrollmentFilter [1] BACnetRecipientProcess OPTIONAL,
- * eventStateFilter [2] ENUMERATED {
- * offnormal (0),
- * fault (1),
- * normal (2),
- * all (3),
- * active (4)
+ * enrollmentFilter [1] BACnetRecipientProcess OPTIONAL,
+ * eventStateFilter [2] ENUMERATED {
+ * offnormal (0),
+ * fault (1),
+ * normal (2),
+ * all (3),
+ * active (4)
* },
- * eventTypeFilter [3] BACnetEventType OPTIONAL,
- * priorityFilter [4] SEQUENCE {
+ * eventTypeFilter [3] BACnetEventType OPTIONAL,
+ * priorityFilter [4] SEQUENCE {
* minPriority [0] Unsigned8,
* maxPriority [1] Unsigned8
* } OPTIONAL,
- * notificationClassFilter [5] Unsigned OPTIONAL
+ * notificationClassFilter [5] Unsigned OPTIONAL
* }
* @param tvb
* @param pinfo
@@ -448,10 +446,10 @@ fGetEnrollmentSummaryRequest (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tre
/**
* GetEnrollmentSummary-ACK ::= SEQUENCE OF SEQUENCE {
- * objectIdentifier BACnetObjectIdentifer,
- * eventType BACnetEventType,
- * eventState BACnetEventState,
- * priority Unsigned8,
+ * objectIdentifier BACnetObjectIdentifer,
+ * eventType BACnetEventType,
+ * eventState BACnetEventState,
+ * priority Unsigned8,
* notificationClass Unsigned OPTIONAL
* }
* @param tvb
@@ -465,7 +463,7 @@ fGetEnrollmentSummaryAck (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, g
/**
* GetEventInformation-Request ::= SEQUENCE {
- * lastReceivedObjectIdentifier [0] BACnetObjectIdentifer
+ * lastReceivedObjectIdentifier [0] BACnetObjectIdentifer
* }
* @param tvb
* @param pinfo
@@ -478,8 +476,8 @@ fGetEventInformationRequest (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree
/**
* GetEventInformation-ACK ::= SEQUENCE {
- * listOfEventSummaries [0] listOfEventSummaries,
- * moreEvents [1] BOOLEAN
+ * listOfEventSummaries [0] listOfEventSummaries,
+ * moreEvents [1] BOOLEAN
* }
* @param tvb
* @param pinfo
@@ -492,10 +490,10 @@ fGetEventInformationACK (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gu
/**
* LifeSafetyOperation-Request ::= SEQUENCE {
- * requestingProcessIdentifier [0] Unsigned32
- * requestingSource [1] CharacterString
- * request [2] BACnetLifeSafetyOperation
- * objectIdentifier [3] BACnetObjectIdentifier OPTIONAL
+ * requestingProcessIdentifier [0] Unsigned32
+ * requestingSource [1] CharacterString
+ * request [2] BACnetLifeSafetyOperation
+ * objectIdentifier [3] BACnetObjectIdentifier OPTIONAL
* }
* @param tvb
* @param pinfo
@@ -508,10 +506,10 @@ fLifeSafetyOperationRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
/**
* SubscribeCOV-Request ::= SEQUENCE {
- * subscriberProcessIdentifier [0] Unsigned32
- * monitoredObjectIdentifier [1] BACnetObjectIdentifier
- * issueConfirmedNotifications [2] BOOLEAN OPTIONAL
- * lifetime [3] Unsigned OPTIONAL
+ * subscriberProcessIdentifier [0] Unsigned32
+ * monitoredObjectIdentifier [1] BACnetObjectIdentifier
+ * issueConfirmedNotifications [2] BOOLEAN OPTIONAL
+ * lifetime [3] Unsigned OPTIONAL
* }
* @param tvb
* @param pinfo
@@ -526,12 +524,12 @@ fSubscribeCOVRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint
/**
* SubscribeCOVProperty-Request ::= SEQUENCE {
- * subscriberProcessIdentifier [0] Unsigned32
- * monitoredObjectIdentifier [1] BACnetObjectIdentifier
- * issueConfirmedNotifications [2] BOOLEAN OPTIONAL
- * lifetime [3] Unsigned OPTIONAL
- * monitoredPropertyIdentifier [4] BACnetPropertyReference OPTIONAL
- * covIncrement [5] Unsigned OPTIONAL
+ * subscriberProcessIdentifier [0] Unsigned32
+ * monitoredObjectIdentifier [1] BACnetObjectIdentifier
+ * issueConfirmedNotifications [2] BOOLEAN OPTIONAL
+ * lifetime [3] Unsigned OPTIONAL
+ * monitoredPropertyIdentifier [4] BACnetPropertyReference OPTIONAL
+ * covIncrement [5] Unsigned OPTIONAL
* }
* @param tvb
* @param pinfo
@@ -544,17 +542,17 @@ fSubscribeCOVPropertyRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree
/**
* AtomicReadFile-Request ::= SEQUENCE {
- * fileIdentifier BACnetObjectIdentifier,
- * accessMethod CHOICE {
- * streamAccess [0] SEQUENCE {
- * fileStartPosition INTEGER,
- * requestedOctetCount Unsigned
- * },
- * recordAccess [1] SEQUENCE {
- * fileStartRecord INTEGER,
- * requestedRecordCount Unsigned
- * }
- * }
+ * fileIdentifier BACnetObjectIdentifier,
+ * accessMethod CHOICE {
+ * streamAccess [0] SEQUENCE {
+ * fileStartPosition INTEGER,
+ * requestedOctetCount Unsigned
+ * },
+ * recordAccess [1] SEQUENCE {
+ * fileStartRecord INTEGER,
+ * requestedRecordCount Unsigned
+ * }
+ * }
* }
* @param tvb
* @param pinfo
@@ -567,18 +565,18 @@ fAtomicReadFileRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guin
/**
* AtomicWriteFile-ACK ::= SEQUENCE {
- * endOfFile BOOLEAN,
- * accessMethod CHOICE {
- * streamAccess [0] SEQUENCE {
- * fileStartPosition INTEGER,
- * fileData OCTET STRING
- * },
- * recordAccess [1] SEQUENCE {
- * fileStartRecord INTEGER,
- * returnedRecordCount Unsigned,
- * fileRecordData SEQUENCE OF OCTET STRING
- * }
- * }
+ * endOfFile BOOLEAN,
+ * accessMethod CHOICE {
+ * streamAccess [0] SEQUENCE {
+ * fileStartPosition INTEGER,
+ * fileData OCTET STRING
+ * },
+ * recordAccess [1] SEQUENCE {
+ * fileStartRecord INTEGER,
+ * returnedRecordCount Unsigned,
+ * fileRecordData SEQUENCE OF OCTET STRING
+ * }
+ * }
* }
* @param tvb
* @param pinfo
@@ -591,18 +589,18 @@ fAtomicReadFileAck (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint o
/**
* AtomicWriteFile-Request ::= SEQUENCE {
- * fileIdentifier BACnetObjectIdentifier,
- * accessMethod CHOICE {
- * streamAccess [0] SEQUENCE {
- * fileStartPosition INTEGER,
- * fileData OCTET STRING
- * },
- * recordAccess [1] SEQUENCE {
- * fileStartRecord INTEGER,
- * recordCount Unsigned,
- * fileRecordData SEQUENCE OF OCTET STRING
- * }
- * }
+ * fileIdentifier BACnetObjectIdentifier,
+ * accessMethod CHOICE {
+ * streamAccess [0] SEQUENCE {
+ * fileStartPosition INTEGER,
+ * fileData OCTET STRING
+ * },
+ * recordAccess [1] SEQUENCE {
+ * fileStartRecord INTEGER,
+ * recordCount Unsigned,
+ * fileRecordData SEQUENCE OF OCTET STRING
+ * }
+ * }
* }
* @param tvb
* @param pinfo
@@ -615,8 +613,8 @@ fAtomicWriteFileRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gui
/**
* AtomicWriteFile-ACK ::= SEQUENCE {
- * fileStartPosition [0] INTEGER,
- * fileStartRecord [1] INTEGER,
+ * fileStartPosition [0] INTEGER,
+ * fileStartRecord [1] INTEGER,
* }
* @param tvb
* @param tree
@@ -628,10 +626,10 @@ fAtomicWriteFileAck (tvbuff_t *tvb, proto_tree *tree, guint offset);
/**
* AddListElement-Request ::= SEQUENCE {
- * objectIdentifier [0] BACnetObjectIdentifier,
- * propertyIdentifier [1] BACnetPropertyIdentifier,
- * propertyArrayIndex [2] Unsigned OPTIONAL, -- used only with array datatype
- * listOfElements [3] ABSTRACT-SYNTAX.&Type
+ * objectIdentifier [0] BACnetObjectIdentifier,
+ * propertyIdentifier [1] BACnetPropertyIdentifier,
+ * propertyArrayIndex [2] Unsigned OPTIONAL, -- used only with array datatype
+ * listOfElements [3] ABSTRACT-SYNTAX.&Type
* }
* @param tvb
* @param pinfo
@@ -644,8 +642,8 @@ fAddListElementRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guin
/**
* CreateObject-Request ::= SEQUENCE {
- * objectSpecifier [0] ObjectSpecifier,
- * listOfInitialValues [1] SEQUENCE OF BACnetPropertyValue OPTIONAL
+ * objectSpecifier [0] ObjectSpecifier,
+ * listOfInitialValues [1] SEQUENCE OF BACnetPropertyValue OPTIONAL
* }
* @param tvb
* @param pinfo
@@ -669,7 +667,7 @@ fCreateObjectAck (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint off
/**
* DeleteObject-Request ::= SEQUENCE {
- * ObjectIdentifier BACnetObjectIdentifer
+ * ObjectIdentifier BACnetObjectIdentifer
* }
* @param tvb
* @param pinfo
@@ -682,9 +680,9 @@ fDeleteObjectRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint
/**
* ReadProperty-Request ::= SEQUENCE {
- * objectIdentifier [0] BACnetObjectIdentifier,
- * propertyIdentifier [1] BACnetPropertyIdentifier,
- * propertyArrayIndex [2] Unsigned OPTIONAL, -- used only with array datatype
+ * objectIdentifier [0] BACnetObjectIdentifier,
+ * propertyIdentifier [1] BACnetPropertyIdentifier,
+ * propertyArrayIndex [2] Unsigned OPTIONAL, -- used only with array datatype
* }
* @param tvb
* @param pinfo
@@ -697,10 +695,10 @@ fReadPropertyRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint
/**
* ReadProperty-ACK ::= SEQUENCE {
- * objectIdentifier [0] BACnetObjectIdentifier,
- * propertyIdentifier [1] BACnetPropertyIdentifier,
- * propertyArrayIndex [2] Unsigned OPTIONAL, -- used only with array datatype
- * propertyValue [3] ABSTRACT-SYNTAX.&Type
+ * objectIdentifier [0] BACnetObjectIdentifier,
+ * propertyIdentifier [1] BACnetPropertyIdentifier,
+ * propertyArrayIndex [2] Unsigned OPTIONAL, -- used only with array datatype
+ * propertyValue [3] ABSTRACT-SYNTAX.&Type
* }
* @param tvb
* @param pinfo
@@ -713,8 +711,8 @@ fReadPropertyAck (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint off
/**
* ReadPropertyConditional-Request ::= SEQUENCE {
- * objectSelectionCriteria [0] objectSelectionCriteria,
- * listOfPropertyReferences [1] SEQUENCE OF BACnetPropertyReference OPTIONAL
+ * objectSelectionCriteria [0] objectSelectionCriteria,
+ * listOfPropertyReferences [1] SEQUENCE OF BACnetPropertyReference OPTIONAL
* }
* @param tvb
* @param pinfo
@@ -727,7 +725,7 @@ fReadPropertyConditionalRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *s
/**
* ReadPropertyConditional-ACK ::= SEQUENCE {
- * listOfPReadAccessResults SEQUENCE OF ReadAccessResult OPTIONAL
+ * listOfPReadAccessResults SEQUENCE OF ReadAccessResult OPTIONAL
* }
* @param tvb
* @param pinfo
@@ -740,7 +738,7 @@ fReadPropertyConditionalAck (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree
/**
* ReadPropertyMultiple-Request ::= SEQUENCE {
- * listOfReadAccessSpecs SEQUENCE OF ReadAccessSpecification
+ * listOfReadAccessSpecs SEQUENCE OF ReadAccessSpecification
* }
* @param tvb
* @param pinfo
@@ -753,7 +751,7 @@ fReadPropertyMultipleRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *subt
/**
* ReadPropertyMultiple-Ack ::= SEQUENCE {
- * listOfReadAccessResults SEQUENCE OF ReadAccessResult
+ * listOfReadAccessResults SEQUENCE OF ReadAccessResult
* }
* @param tvb
* @parma pinfo
@@ -766,23 +764,23 @@ fReadPropertyMultipleAck (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, g
/**
* ReadRange-Request ::= SEQUENCE {
- * objectIdentifier [0] BACnetObjectIdentifier,
- * propertyIdentifier [1] BACnetPropertyIdentifier,
- * propertyArrayIndex [2] Unsigned OPTIONAL, -- used only with array datatype
- * range CHOICE {
- * byPosition [3] SEQUENCE {
- * referencedIndex Unsigned,
- * count INTEGER
- * },
- * byTime [4] SEQUENCE {
- * referenceTime BACnetDateTime,
- * count INTEGER
- * },
- * timeRange [5] SEQUENCE {
- * beginningTime BACnetDateTime,
- * endingTime BACnetDateTime
- * },
- * } OPTIONAL
+ * objectIdentifier [0] BACnetObjectIdentifier,
+ * propertyIdentifier [1] BACnetPropertyIdentifier,
+ * propertyArrayIndex [2] Unsigned OPTIONAL, -- used only with array datatype
+ * range CHOICE {
+ * byPosition [3] SEQUENCE {
+ * referencedIndex Unsigned,
+ * count INTEGER
+ * },
+ * byTime [4] SEQUENCE {
+ * referenceTime BACnetDateTime,
+ * count INTEGER
+ * },
+ * timeRange [5] SEQUENCE {
+ * beginningTime BACnetDateTime,
+ * endingTime BACnetDateTime
+ * },
+ * } OPTIONAL
* }
* @param tvb
* @param pinfo
@@ -795,12 +793,12 @@ fReadRangeRequest (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint of
/**
* ReadRange-ACK ::= SEQUENCE {
- * objectIdentifier [0] BACnetObjectIdentifier,
- * propertyIdentifier [1] BACnetPropertyIdentifier,
- * propertyArrayIndex [2] Unsigned OPTIONAL, -- used only with array datatype
- * resultFlags [3] BACnetResultFlags,
- * itemCount [4] Unsigned,
- * itemData [5] SEQUENCE OF ABSTRACT-SYNTAX.&Type
+ * objectIdentifier [0] BACnetObjectIdentifier,
+ * propertyIdentifier [1] BACnetPropertyIdentifier,
+ * propertyArrayIndex [2] Unsigned OPTIONAL, -- used only with array datatype
+ * resultFlags [3] BACnetResultFlags,
+ * itemCount [4] Unsigned,
+ * itemData [5] SEQUENCE OF ABSTRACT-SYNTAX.&Type
* }
* @param tvb
* @param pinfo
@@ -813,10 +811,10 @@ fReadRangeAck (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset
/**
* RemoveListElement-Request ::= SEQUENCE {
- * objectIdentifier [0] BACnetObjectIdentifier,
- * propertyIdentifier [1] BACnetPropertyIdentifier,
- * propertyArrayIndex [2] Unsigned OPTIONAL, -- used only with array datatype
- * listOfElements [3] ABSTRACT-SYNTAX.&Type
+ * objectIdentifier [0] BACnetObjectIdentifier,
+ * propertyIdentifier [1] BACnetPropertyIdentifier,
+ * propertyArrayIndex [2] Unsigned OPTIONAL, -- used only with array datatype
+ * listOfElements [3] ABSTRACT-SYNTAX.&Type
* }
* @param tvb
* @param pinfo
@@ -829,11 +827,11 @@ fRemoveListElementRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, g
/**
* WriteProperty-Request ::= SEQUENCE {
- * objectIdentifier [0] BACnetObjectIdentifier,
- * propertyIdentifier [1] BACnetPropertyIdentifier,
- * propertyArrayIndex [2] Unsigned OPTIONAL, -- used only with array datatype
- * propertyValue [3] ABSTRACT-SYNTAX.&Type
- * priority [4] Unsigned8 (1..16) OPTIONAL --used only when property is commandable
+ * objectIdentifier [0] BACnetObjectIdentifier,
+ * propertyIdentifier [1] BACnetPropertyIdentifier,
+ * propertyArrayIndex [2] Unsigned OPTIONAL, -- used only with array datatype
+ * propertyValue [3] ABSTRACT-SYNTAX.&Type
+ * priority [4] Unsigned8 (1..16) OPTIONAL --used only when property is commandable
* }
* @param tvb
* @param pinfo
@@ -846,7 +844,7 @@ fWritePropertyRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint
/**
* WritePropertyMultiple-Request ::= SEQUENCE {
- * listOfWriteAccessSpecifications SEQUENCE OF WriteAccessSpecification
+ * listOfWriteAccessSpecifications SEQUENCE OF WriteAccessSpecification
* }
* @param tvb
* @param pinfo
@@ -859,12 +857,12 @@ fWritePropertyMultipleRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tre
/**
* DeviceCommunicationControl-Request ::= SEQUENCE {
- * timeDuration [0] Unsigned16 OPTIONAL,
- * enable-disable [1] ENUMERATED {
- * enable (0),
- * disable (1)
- * },
- * password [2] CharacterString (SIZE(1..20)) OPTIONAL
+ * timeDuration [0] Unsigned16 OPTIONAL,
+ * enable-disable [1] ENUMERATED {
+ * enable (0),
+ * disable (1)
+ * },
+ * password [2] CharacterString (SIZE(1..20)) OPTIONAL
* }
* @param tvb
* @param tree
@@ -876,9 +874,9 @@ fDeviceCommunicationControlRequest(tvbuff_t *tvb, proto_tree *tree, guint offset
/**
* ConfirmedPrivateTransfer-Request ::= SEQUENCE {
- * vendorID [0] Unsigned,
- * serviceNumber [1] Unsigned,
- * serviceParameters [2] ABSTRACT-SYNTAX.&Type OPTIONAL
+ * vendorID [0] Unsigned,
+ * serviceNumber [1] Unsigned,
+ * serviceParameters [2] ABSTRACT-SYNTAX.&Type OPTIONAL
* }
* @param tvb
* @param pinfo
@@ -891,9 +889,9 @@ fConfirmedPrivateTransferRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
/**
* ConfirmedPrivateTransfer-ACK ::= SEQUENCE {
- * vendorID [0] Unsigned,
- * serviceNumber [1] Unsigned,
- * resultBlock [2] ABSTRACT-SYNTAX.&Type OPTIONAL
+ * vendorID [0] Unsigned,
+ * serviceNumber [1] Unsigned,
+ * resultBlock [2] ABSTRACT-SYNTAX.&Type OPTIONAL
* }
* @param tvb
* @param pinfo
@@ -907,11 +905,11 @@ fConfirmedPrivateTransferAck(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree
/**
* ConfirmedTextMessage-Request ::= SEQUENCE {
* textMessageSourceDevice [0] BACnetObjectIdentifier,
- * messageClass [1] CHOICE {
- * numeric [0] Unsigned,
+ * messageClass [1] CHOICE {
+ * numeric [0] Unsigned,
* character [1] CharacterString
* } OPTIONAL,
- * messagePriority [2] ENUMERATED {
+ * messagePriority [2] ENUMERATED {
* normal (0),
* urgent (1)
* },
@@ -928,16 +926,16 @@ fConfirmedTextMessageRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree
/**
* ReinitializeDevice-Request ::= SEQUENCE {
- * reinitializedStateOfDevice [0] ENUMERATED {
- * coldstart (0),
- * warmstart (1),
- * startbackup (2),
- * endbackup (3),
- * startrestore (4),
- * endrestore (5),
- * abortrestor (6)
- * },
- * password [1] CharacterString (SIZE(1..20)) OPTIONAL
+ * reinitializedStateOfDevice [0] ENUMERATED {
+ * coldstart (0),
+ * warmstart (1),
+ * startbackup (2),
+ * endbackup (3),
+ * startrestore (4),
+ * endrestore (5),
+ * abortrestor (6)
+ * },
+ * password [1] CharacterString (SIZE(1..20)) OPTIONAL
* }
* @param tvb
* @param tree
@@ -949,8 +947,8 @@ fReinitializeDeviceRequest(tvbuff_t *tvb, proto_tree *tree, guint offset);
/**
* VTOpen-Request ::= SEQUENCE {
- * vtClass BACnetVTClass,
- * localVTSessionIdentifier Unsigned8
+ * vtClass BACnetVTClass,
+ * localVTSessionIdentifier Unsigned8
* }
* @param tvb
* @param pinfo
@@ -963,7 +961,7 @@ fVtOpenRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset
/**
* VTOpen-ACK ::= SEQUENCE {
- * remoteVTSessionIdentifier Unsigned8
+ * remoteVTSessionIdentifier Unsigned8
* }
* @param tvb
* @param pinfo
@@ -976,7 +974,7 @@ fVtOpenAck (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset);
/**
* VTClose-Request ::= SEQUENCE {
- * listOfRemoteVTSessionIdentifiers SEQUENCE OF Unsigned8
+ * listOfRemoteVTSessionIdentifiers SEQUENCE OF Unsigned8
* }
* @param tvb
* @param pinfo
@@ -989,9 +987,9 @@ fVtCloseRequest (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offs
/**
* VTData-Request ::= SEQUENCE {
- * vtSessionIdentifier Unsigned8,
- * vtNewData OCTET STRING,
- * vtDataFlag Unsigned (0..1)
+ * vtSessionIdentifier Unsigned8,
+ * vtNewData OCTET STRING,
+ * vtDataFlag Unsigned (0..1)
* }
* @param tvb
* @param pinfo
@@ -1004,8 +1002,8 @@ fVtDataRequest (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offse
/**
* VTData-ACK ::= SEQUENCE {
- * allNewDataAccepted [0] BOOLEAN,
- * acceptedOctetCount [1] Unsigned OPTIONAL -- present only if allNewDataAccepted = FALSE
+ * allNewDataAccepted [0] BOOLEAN,
+ * acceptedOctetCount [1] Unsigned OPTIONAL -- present only if allNewDataAccepted = FALSE
* }
* @param tvb
* @param tree
@@ -1017,11 +1015,11 @@ fVtDataAck (tvbuff_t *tvb, proto_tree *tree, guint offset);
/**
* Authenticate-Request ::= SEQUENCE {
- * pseudoRandomNumber [0] Unsigned32,
- * excpectedInvokeID [1] Unsigned8 OPTIONAL,
- * operatorName [2] CharacterString OPTIONAL,
- * operatorPassword [3] CharacterString (SIZE(1..20)) OPTIONAL,
- * startEncypheredSession [4] BOOLEAN OPTIONAL
+ * pseudoRandomNumber [0] Unsigned32,
+ * excpectedInvokeID [1] Unsigned8 OPTIONAL,
+ * operatorName [2] CharacterString OPTIONAL,
+ * operatorPassword [3] CharacterString (SIZE(1..20)) OPTIONAL,
+ * startEncypheredSession [4] BOOLEAN OPTIONAL
* }
* @param tvb
* @param tree
@@ -1033,7 +1031,7 @@ fAuthenticateRequest (tvbuff_t *tvb, proto_tree *tree, guint offset);
/**
* Authenticate-ACK ::= SEQUENCE {
- * modifiedRandomNumber Unsigned32,
+ * modifiedRandomNumber Unsigned32,
* }
* @param tvb
* @param pinfo
@@ -1046,10 +1044,10 @@ fAuthenticateAck (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint off
/**
* RequestKey-Request ::= SEQUENCE {
- * requestingDeviceIdentifier BACnetObjectIdentifier,
- * requestingDeviceAddress BACnetAddress,
- * remoteDeviceIdentifier BACnetObjectIdentifier,
- * remoteDeviceAddress BACnetAddress
+ * requestingDeviceIdentifier BACnetObjectIdentifier,
+ * requestingDeviceAddress BACnetAddress,
+ * remoteDeviceIdentifier BACnetObjectIdentifier,
+ * remoteDeviceAddress BACnetAddress
* }
* @param tvb
* @param pinfo
@@ -1075,11 +1073,11 @@ fUnconfirmedServiceRequest (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
/**
* UnconfirmedCOVNotification-Request ::= SEQUENCE {
- * subscriberProcessIdentifier [0] Unsigned32,
- * initiatingDeviceIdentifier [1] BACnetObjectIdentifer,
- * monitoredObjectIdentifier [2] BACnetObjectIdentifer,
- * timeRemaining [3] unsigned,
- * listOfValues [4] SEQUENCE OF BACnetPropertyValues
+ * subscriberProcessIdentifier [0] Unsigned32,
+ * initiatingDeviceIdentifier [1] BACnetObjectIdentifer,
+ * monitoredObjectIdentifier [2] BACnetObjectIdentifer,
+ * timeRemaining [3] unsigned,
+ * listOfValues [4] SEQUENCE OF BACnetPropertyValues
* }
* @param tvb
* @param pinfo
@@ -1092,19 +1090,19 @@ fUnconfirmedCOVNotificationRequest (tvbuff_t *tvb, packet_info *pinfo, proto_tre
/**
* UnconfirmedEventNotification-Request ::= SEQUENCE {
- * ProcessIdentifier [0] Unsigned32,
- * initiatingDeviceIdentifier [1] BACnetObjectIdentifer,
- * eventObjectIdentifier [2] BACnetObjectIdentifer,
- * timeStamp [3] BACnetTimeStamp,
- * notificationClass [4] unsigned,
- * priority [5] unsigned8,
- * eventType [6] BACnetEventType,
- * messageText [7] CharacterString OPTIONAL,
- * notifyType [8] BACnetNotifyType,
- * ackRequired [9] BOOLEAN OPTIONAL,
- * fromState [10] BACnetEventState OPTIONAL,
- * toState [11] BACnetEventState,
- * eventValues [12] BACnetNotificationParameters OPTIONAL
+ * ProcessIdentifier [0] Unsigned32,
+ * initiatingDeviceIdentifier [1] BACnetObjectIdentifer,
+ * eventObjectIdentifier [2] BACnetObjectIdentifer,
+ * timeStamp [3] BACnetTimeStamp,
+ * notificationClass [4] unsigned,
+ * priority [5] unsigned8,
+ * eventType [6] BACnetEventType,
+ * messageText [7] CharacterString OPTIONAL,
+ * notifyType [8] BACnetNotifyType,
+ * ackRequired [9] BOOLEAN OPTIONAL,
+ * fromState [10] BACnetEventState OPTIONAL,
+ * toState [11] BACnetEventState,
+ * eventValues [12] BACnetNotificationParameters OPTIONAL
* }
* @param tvb
* @param pinfo
@@ -1117,10 +1115,10 @@ fUnconfirmedEventNotificationRequest (tvbuff_t *tvb, packet_info *pinfo, proto_t
/**
* I-Am-Request ::= SEQUENCE {
- * aAmDeviceIdentifier BACnetObjectIdentifier,
- * maxAPDULengthAccepted Unsigned,
- * segmentationSupported BACnetSegmentation,
- * vendorID Unsigned
+ * aAmDeviceIdentifier BACnetObjectIdentifier,
+ * maxAPDULengthAccepted Unsigned,
+ * segmentationSupported BACnetSegmentation,
+ * vendorID Unsigned
* }
* @param tvb
* @param pinfo
@@ -1134,9 +1132,9 @@ fIAmRequest (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
/**
* I-Have-Request ::= SEQUENCE {
- * deviceIdentifier BACnetObjectIdentifier,
- * objectIdentifier BACnetObjectIdentifier,
- * objectName CharacterString
+ * deviceIdentifier BACnetObjectIdentifier,
+ * objectIdentifier BACnetObjectIdentifier,
+ * objectName CharacterString
* }
* @param tvb
* @param pinfo
@@ -1149,9 +1147,9 @@ fIHaveRequest (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offse
/**
* UnconfirmedPrivateTransfer-Request ::= SEQUENCE {
- * vendorID [0] Unsigned,
- * serviceNumber [1] Unsigned,
- * serviceParameters [2] ABSTRACT-SYNTAX.&Type OPTIONAL
+ * vendorID [0] Unsigned,
+ * serviceNumber [1] Unsigned,
+ * serviceParameters [2] ABSTRACT-SYNTAX.&Type OPTIONAL
* }
* @param tvb
* @param pinfo
@@ -1165,15 +1163,15 @@ fUnconfirmedPrivateTransferRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree
/**
* UnconfirmedTextMessage-Request ::= SEQUENCE {
* textMessageSourceDevice [0] BACnetObjectIdentifier,
- * messageClass [1] CHOICE {
- * numeric [0] Unsigned,
+ * messageClass [1] CHOICE {
+ * numeric [0] Unsigned,
* character [1] CharacterString
* } OPTIONAL,
- * messagePriority [2] ENUMERATED {
+ * messagePriority [2] ENUMERATED {
* normal (0),
* urgent (1)
* },
- * message [3] CharacterString
+ * message [3] CharacterString
* }
* @param tvb
* @param pinfo
@@ -1211,12 +1209,12 @@ fUTCTimeSynchronizationRequest (tvbuff_t *tvb, proto_tree *tree, guint offset);
/**
* Who-Has-Request ::= SEQUENCE {
* limits SEQUENCE {
- * deviceInstanceRangeLowLimit [0] Unsigned (0..4194303),
+ * deviceInstanceRangeLowLimit [0] Unsigned (0..4194303),
* deviceInstanceRangeHighLimit [1] Unsigned (0..4194303)
* } OPTIONAL,
* object CHOICE {
- * objectIdentifier [2] BACnetObjectIdentifier,
- * objectName [3] CharacterString
+ * objectIdentifier [2] BACnetObjectIdentifier,
+ * objectName [3] CharacterString
* }
* }
* @param tvb
@@ -1230,8 +1228,8 @@ fWhoHas (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset);
/**
* Who-Is-Request ::= SEQUENCE {
- * deviceInstanceRangeLowLimit [0] Unsigned (0..4194303) OPTIONAL, -- must be used as a pair, see 16.9,
- * deviceInstanceRangeHighLimit [0] Unsigned (0..4194303) OPTIONAL, -- must be used as a pair, see 16.9,
+ * deviceInstanceRangeLowLimit [0] Unsigned (0..4194303) OPTIONAL, -- must be used as a pair, see 16.9,
+ * deviceInstanceRangeHighLimit [0] Unsigned (0..4194303) OPTIONAL, -- must be used as a pair, see 16.9,
* }
* @param tvb
* @param tree
@@ -1243,13 +1241,13 @@ fWhoIsRequest (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offse
/**
* BACnet-Error ::= CHOICE {
- * addListElement [8] ChangeList-Error,
- * removeListElement [9] ChangeList-Error,
+ * addListElement [8] ChangeList-Error,
+ * removeListElement [9] ChangeList-Error,
* writePropertyMultiple [16] WritePropertyMultiple-Error,
* confirmedPrivatTransfer [18] ConfirmedPrivateTransfer-Error,
* vtClose [22] VTClose-Error,
* readRange [26] ObjectAccessService-Error
- * [default] Error
+ * [default] Error
* }
* @param tvb
* @param pinfo
@@ -1274,8 +1272,8 @@ static guint fContextTaggedError(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
/**
* ChangeList-Error ::= SEQUENCE {
- * errorType [0] Error,
- * firstFailedElementNumber [1] Unsigned
+ * errorType [0] Error,
+ * firstFailedElementNumber [1] Unsigned
* }
* }
* @param tvb
@@ -1289,8 +1287,8 @@ fChangeListError(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offs
/**
* CreateObject-Error ::= SEQUENCE {
- * errorType [0] Error,
- * firstFailedElementNumber [1] Unsigned
+ * errorType [0] Error,
+ * firstFailedElementNumber [1] Unsigned
* }
* }
* @param tvb
@@ -1304,10 +1302,10 @@ fCreateObjectError(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint of
/**
* ConfirmedPrivateTransfer-Error ::= SEQUENCE {
- * errorType [0] Error,
- * vendorID [1] Unsigned,
- * serviceNumber [2] Unsigned,
- * errorParameters [3] ABSTRACT-SYNTAX.&Type OPTIONAL
+ * errorType [0] Error,
+ * vendorID [1] Unsigned,
+ * serviceNumber [2] Unsigned,
+ * errorParameters [3] ABSTRACT-SYNTAX.&Type OPTIONAL
* }
* }
* @param tvb
@@ -1321,8 +1319,8 @@ fConfirmedPrivateTransferError(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tr
/**
* WritePropertyMultiple-Error ::= SEQUENCE {
- * errorType [0] Error,
- * firstFailedWriteAttempt [1] Unsigned
+ * errorType [0] Error,
+ * firstFailedWriteAttempt [1] Unsigned
* }
* }
* @param tvb
@@ -1336,8 +1334,8 @@ fWritePropertyMultipleError(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
/**
* VTClose-Error ::= SEQUENCE {
- * errorType [0] Error,
- * listOfVTSessionIdentifiers [1] SEQUENCE OF Unsigned8 OPTIONAL
+ * errorType [0] Error,
+ * listOfVTSessionIdentifiers [1] SEQUENCE OF Unsigned8 OPTIONAL
* }
* }
* @param tvb
@@ -1410,8 +1408,8 @@ fAddress (tvbuff_t *tvb, proto_tree *tree, guint offset);
/**
* BACnetAddressBinding ::= SEQUENCE {
- * deviceObjectID BACnetObjectIdentifier
- * deviceAddress BacnetAddress
+ * deviceObjectID BACnetObjectIdentifier
+ * deviceAddress BacnetAddress
* }
* @param tvb
* @param pinfo
@@ -1424,8 +1422,8 @@ fAddressBinding (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offs
/**
* BACnetCalendarEntry ::= CHOICE {
- * date [0] Date,
- * dateRange [1] BACnetDateRange,
+ * date [0] Date,
+ * dateRange [1] BACnetDateRange,
* weekNDay [2] BacnetWeekNday
* }
* @param tvb
@@ -1438,8 +1436,8 @@ fCalendarEntry (tvbuff_t *tvb, proto_tree *tree, guint offset);
/**
* BACnetClientCOV ::= CHOICE {
- * real-increment REAL,
- * default-increment NULL
+ * real-increment REAL,
+ * default-increment NULL
* }
* @param tvb
* @param tree
@@ -1569,50 +1567,50 @@ fDeviceObjectReference (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gui
/**
* BACnetEventParameter ::= CHOICE {
- * change-of-bitstring [0] SEQUENCE {
- * time-delay [0] Unsigned,
- * bitmask [1] BIT STRING,
- * list-of-bitstring-values [2] SEQUENCE OF BIT STRING
- * },
- * change-of-state [1] SEQUENCE {
- * time-delay [0] Unsigned,
- * list-of-values [1] SEQUENCE OF BACnetPropertyStates
- * },
- * change-of-value [2] SEQUENCE {
- * time-delay [0] Unsigned,
- * cov-criteria [1] CHOICE {
- * bitmask [0] BIT STRING,
- * referenced-property-increment [1] REAL
- * }
- * },
- * command-failure [3] SEQUENCE {
- * time-delay [0] Unsigned,
- * feedback-property-reference [1] BACnetDeviceObjectPropertyReference
- * },
- * floating-limit [4] SEQUENCE {
- * time-delay [0] Unsigned,
- * setpoint-reference [1] BACnetDeviceObjectPropertyReference,
- * low-diff-limit [2] REAL,
- * high-diff-limit [3] REAL,
- * deadband [4] REAL
- * },
- * out-of-range [5] SEQUENCE {
- * time-delay [0] Unsigned,
- * low-limit [1] REAL,
- * high-limit [2] REAL,
- * deadband [3] REAL
- * },
- * buffer-ready [7] SEQUENCE {
- * notification-threshold [0] Unsigned,
- * previous-notification-count [1] Unsigned32
- * }
- * change-of-life-safety [8] SEQUENCE {
- * time-delay [0] Unsigned,
- * list-of-life-safety-alarm-values [1] SEQUENCE OF BACnetLifeSafetyState,
- * list-of-alarm-values [2] SEQUENCE OF BACnetLifeSafetyState,
- * mode-property-reference [3] BACnetDeviceObjectPropertyReference
- * }
- * }
+ * change-of-bitstring [0] SEQUENCE {
+ * time-delay [0] Unsigned,
+ * bitmask [1] BIT STRING,
+ * list-of-bitstring-values [2] SEQUENCE OF BIT STRING
+ * },
+ * change-of-state [1] SEQUENCE {
+ * time-delay [0] Unsigned,
+ * list-of-values [1] SEQUENCE OF BACnetPropertyStates
+ * },
+ * change-of-value [2] SEQUENCE {
+ * time-delay [0] Unsigned,
+ * cov-criteria [1] CHOICE {
+ * bitmask [0] BIT STRING,
+ * referenced-property-increment [1] REAL
+ * }
+ * },
+ * command-failure [3] SEQUENCE {
+ * time-delay [0] Unsigned,
+ * feedback-property-reference [1] BACnetDeviceObjectPropertyReference
+ * },
+ * floating-limit [4] SEQUENCE {
+ * time-delay [0] Unsigned,
+ * setpoint-reference [1] BACnetDeviceObjectPropertyReference,
+ * low-diff-limit [2] REAL,
+ * high-diff-limit [3] REAL,
+ * deadband [4] REAL
+ * },
+ * out-of-range [5] SEQUENCE {
+ * time-delay [0] Unsigned,
+ * low-limit [1] REAL,
+ * high-limit [2] REAL,
+ * deadband [3] REAL
+ * },
+ * buffer-ready [7] SEQUENCE {
+ * notification-threshold [0] Unsigned,
+ * previous-notification-count [1] Unsigned32
+ * }
+ * change-of-life-safety [8] SEQUENCE {
+ * time-delay [0] Unsigned,
+ * list-of-life-safety-alarm-values [1] SEQUENCE OF BACnetLifeSafetyState,
+ * list-of-alarm-values [2] SEQUENCE OF BACnetLifeSafetyState,
+ * mode-property-reference [3] BACnetDeviceObjectPropertyReference
+ * }
+ * }
* @param tvb
* @param tree
* @param offset
@@ -1625,21 +1623,21 @@ fEventParameter (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offs
/**
* BACnetLogRecord ::= SEQUENCE {
- * timestamp [0] BACnetDateTime,
- * logDatum [1] CHOICE {
- * log-status [0] BACnetLogStatus,
- * boolean-value [1] BOOLEAN,
- * real-value [2] REAL,
- * enum-value [3] ENUMERATED, -- Optionally limited to 32 bits
- * unsigned-value [4] Unsigned, -- Optionally limited to 32 bits
- * signed-value [5] INTEGER, -- Optionally limited to 32 bits
- * bitstring-value [6] BIT STRING,-- Optionally limited to 32 bits
- * null-value [7] NULL,
- * failure [8] Error,
- * time-change [9] REAL,
- * any-value [10] ABSTRACT-SYNTAX.&Type -- Optional
- * }
- * statusFlags [2] BACnetStatusFlags OPTIONAL
+ * timestamp [0] BACnetDateTime,
+ * logDatum [1] CHOICE {
+ * log-status [0] BACnetLogStatus,
+ * boolean-value [1] BOOLEAN,
+ * real-value [2] REAL,
+ * enum-value [3] ENUMERATED, -- Optionally limited to 32 bits
+ * unsigned-value [4] Unsigned, -- Optionally limited to 32 bits
+ * signed-value [5] INTEGER, -- Optionally limited to 32 bits
+ * bitstring-value [6] BIT STRING,-- Optionally limited to 32 bits
+ * null-value [7] NULL,
+ * failure [8] Error,
+ * time-change [9] REAL,
+ * any-value [10] ABSTRACT-SYNTAX.&Type -- Optional
+ * }
+ * statusFlags [2] BACnetStatusFlags OPTIONAL
* }
* @param tvb
* @param pinfo
@@ -1652,12 +1650,12 @@ fLogRecord (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset);
/**
* BACnetEventLogRecord ::= SEQUENCE {
- * timestamp [0] BACnetDateTime,
- * logDatum [1] CHOICE {
- * log-status [0] BACnetLogStatus,
- * notification [1] ConfirmedEventNotification-Request,
- * time-change [2] REAL,
- * }
+ * timestamp [0] BACnetDateTime,
+ * logDatum [1] CHOICE {
+ * log-status [0] BACnetLogStatus,
+ * notification [1] ConfirmedEventNotification-Request,
+ * time-change [2] REAL,
+ * }
* }
* @param tvb
* @param pinfo
@@ -1673,49 +1671,49 @@ fLogMultipleRecord (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint o
/**
* BACnetNotificationParameters ::= CHOICE {
- * change-of-bitstring [0] SEQUENCE {
- * referenced-bitstring [0] BIT STRING,
- * status-flags [1] BACnetStatusFlags
+ * change-of-bitstring [0] SEQUENCE {
+ * referenced-bitstring [0] BIT STRING,
+ * status-flags [1] BACnetStatusFlags
* },
- * change-of-state [1] SEQUENCE {
- * new-state [0] BACnetPropertyStatus,
- * status-flags [1] BACnetStatusFlags
+ * change-of-state [1] SEQUENCE {
+ * new-state [0] BACnetPropertyStatus,
+ * status-flags [1] BACnetStatusFlags
* },
- * change-of-value [2] SEQUENCE {
- * new-value [0] CHOICE {
- * changed-bits [0] BIT STRING,
- * changed-value [1] REAL
+ * change-of-value [2] SEQUENCE {
+ * new-value [0] CHOICE {
+ * changed-bits [0] BIT STRING,
+ * changed-value [1] REAL
* },
- * status-flags [1] BACnetStatusFlags
+ * status-flags [1] BACnetStatusFlags
* },
- * command-failure [3] SEQUENCE {
- * command-value [0] ABSTRACT-SYNTAX.&Type, -- depends on ref property
- * status-flags [1] BACnetStatusFlags
- * feedback-value [2] ABSTRACT-SYNTAX.&Type -- depends on ref property
+ * command-failure [3] SEQUENCE {
+ * command-value [0] ABSTRACT-SYNTAX.&Type, -- depends on ref property
+ * status-flags [1] BACnetStatusFlags
+ * feedback-value [2] ABSTRACT-SYNTAX.&Type -- depends on ref property
* },
- * floating-limit [4] SEQUENCE {
- * reference-value [0] REAL,
- * status-flags [1] BACnetStatusFlags
- * setpoint-value [2] REAL,
- * error-limit [3] REAL
+ * floating-limit [4] SEQUENCE {
+ * reference-value [0] REAL,
+ * status-flags [1] BACnetStatusFlags
+ * setpoint-value [2] REAL,
+ * error-limit [3] REAL
* },
- * out-of-range [5] SEQUENCE {
- * exceeding-value [0] REAL,
- * status-flags [1] BACnetStatusFlags
- * deadband [2] REAL,
- * exceeded-limit [0] REAL
+ * out-of-range [5] SEQUENCE {
+ * exceeding-value [0] REAL,
+ * status-flags [1] BACnetStatusFlags
+ * deadband [2] REAL,
+ * exceeded-limit [0] 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
+ * buffer-ready [7] SEQUENCE {
+ * buffer-device [0] BACnetObjectIdentifier,
+ * buffer-object [1] BACnetObjectIdentifier
+ * previous-notification[2] BACnetDateTime,
+ * current-notification [3] BACnetDateTime
* },
- * change-of-life-safety [8] SEQUENCE {
- * new-state [0] BACnetLifeSafetyState,
- * new-mode [1] BACnetLifeSafetyState
- * status-flags [2] BACnetStatusFlags,
+ * change-of-life-safety [8] SEQUENCE {
+ * new-state [0] BACnetLifeSafetyState,
+ * new-mode [1] BACnetLifeSafetyState
+ * status-flags [2] BACnetStatusFlags,
* operation-expected [3] BACnetLifeSafetyOperation
* }
* }
@@ -1730,9 +1728,9 @@ fNotificationParameters (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gu
/**
* BACnetObjectPropertyReference ::= SEQUENCE {
- * objectIdentifier [0] BACnetObjectIdentifier,
- * propertyIdentifier [1] BACnetPropertyIdentifier,
- * propertyArrayIndex [2] Unsigned OPTIONAL, -- used only with array datatype
+ * objectIdentifier [0] BACnetObjectIdentifier,
+ * propertyIdentifier [1] BACnetPropertyIdentifier,
+ * propertyArrayIndex [2] Unsigned OPTIONAL, -- used only with array datatype
* }
* @param tvb
* @param pinfo
@@ -1746,12 +1744,12 @@ fBACnetObjectPropertyReference (tvbuff_t *tvb, packet_info *pinfo, proto_tree *t
#if 0
/**
* BACnetObjectPropertyValue ::= SEQUENCE {
- * objectIdentifier [0] BACnetObjectIdentifier,
- * propertyIdentifier [1] BACnetPropertyIdentifier,
- * propertyArrayIndex [2] Unsigned OPTIONAL, -- used only with array datatype
- * -- if omitted with an array the entire array is referenced
- * value [3] ABSTRACT-SYNTAX.&Type, --any datatype appropriate for the specified property
- * priority [4] Unsigned (1..16) OPTIONAL
+ * objectIdentifier [0] BACnetObjectIdentifier,
+ * propertyIdentifier [1] BACnetPropertyIdentifier,
+ * propertyArrayIndex [2] Unsigned OPTIONAL, -- used only with array datatype
+ * -- if omitted with an array the entire array is referenced
+ * value [3] ABSTRACT-SYNTAX.&Type, --any datatype appropriate for the specified property
+ * priority [4] Unsigned (1..16) OPTIONAL
* }
* @param tvb
* @param tree
@@ -1778,8 +1776,8 @@ fPropertyReference (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint o
/**
* BACnetPropertyReference ::= SEQUENCE {
- * propertyIdentifier [0] BACnetPropertyIdentifier,
- * propertyArrayIndex [1] Unsigned OPTIONAL, -- used only with array datatype
+ * propertyIdentifier [0] BACnetPropertyIdentifier,
+ * propertyArrayIndex [1] Unsigned OPTIONAL, -- used only with array datatype
* }
* @param tvb
* @param pinfo
@@ -1801,11 +1799,11 @@ fRestartReason (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offse
/**
* BACnetPropertyValue ::= SEQUENCE {
- * PropertyIdentifier [0] BACnetPropertyIdentifier,
- * propertyArrayIndex [1] Unsigned OPTIONAL, -- used only with array datatypes
- * -- if omitted with an array the entire array is referenced
- * value [2] ABSTRACT-SYNTAX.&Type, -- any datatype appropriate for the specified property
- * priority [3] Unsigned (1..16) OPTIONAL -- used only when property is commandable
+ * PropertyIdentifier [0] BACnetPropertyIdentifier,
+ * propertyArrayIndex [1] Unsigned OPTIONAL, -- used only with array datatypes
+ * -- if omitted with an array the entire array is referenced
+ * value [2] ABSTRACT-SYNTAX.&Type, -- any datatype appropriate for the specified property
+ * priority [3] Unsigned (1..16) OPTIONAL -- used only when property is commandable
* }
* @param tvb
* @param pinfo
@@ -1822,8 +1820,8 @@ fPropertyValue (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offse
/**
* BACnet Application PDUs chapter 21
* BACnetRecipient::= CHOICE {
- * device [0] BACnetObjectIdentifier
- * address [1] BACnetAddress
+ * device [0] BACnetObjectIdentifier
+ * address [1] BACnetAddress
* }
* @param tvb
* @param pinfo
@@ -1837,8 +1835,8 @@ fRecipient (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset);
/**
* BACnet Application PDUs chapter 21
* BACnetRecipientProcess::= SEQUENCE {
- * recipient [0] BACnetRecipient
- * processID [1] Unsigned32
+ * recipient [0] BACnetRecipient
+ * processID [1] Unsigned32
* }
* @param tvb
* @param pinfo
@@ -1855,8 +1853,8 @@ fCOVSubscription (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint off
#if 0
/**
* BACnetSessionKey ::= SEQUENCE {
- * sessionKey OCTET STRING (SIZE(8)), -- 56 bits for key, 8 bits for checksum
- * peerAddress BACnetAddress
+ * sessionKey OCTET STRING (SIZE(8)), -- 56 bits for key, 8 bits for checksum
+ * peerAddress BACnetAddress
* }
* @param tvb
* @param tree
@@ -1870,12 +1868,12 @@ fSessionKey (tvbuff_t *tvb, proto_tree *tree, guint offset);
/**
* BACnetSpecialEvent ::= SEQUENCE {
- * period CHOICE {
- * calendarEntry [0] BACnetCalendarEntry,
- * calendarRefernce [1] BACnetObjectIdentifier
- * },
- * listOfTimeValues [2] SEQUENCE OF BACnetTimeValue,
- * eventPriority [3] Unsigned (1..16)
+ * period CHOICE {
+ * calendarEntry [0] BACnetCalendarEntry,
+ * calendarRefernce [1] BACnetObjectIdentifier
+ * },
+ * listOfTimeValues [2] SEQUENCE OF BACnetTimeValue,
+ * eventPriority [3] Unsigned (1..16)
* }
* @param tvb
* @param pinfo
@@ -1888,9 +1886,9 @@ fSpecialEvent (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset
/**
* BACnetTimeStamp ::= CHOICE {
- * time [0] Time,
- * sequenceNumber [1] Unsigned (0..65535),
- * dateTime [2] BACnetDateTime
+ * time [0] Time,
+ * sequenceNumber [1] Unsigned (0..65535),
+ * dateTime [2] BACnetDateTime
* }
* @param tvb
* @param tree
@@ -1906,8 +1904,8 @@ fEventTimeStamps(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offs
/**
* BACnetTimeValue ::= SEQUENCE {
- * time Time,
- * value ABSTRACT-SYNTAX.&Type -- any primitive datatype, complex types cannot be decoded
+ * time Time,
+ * value ABSTRACT-SYNTAX.&Type -- any primitive datatype, complex types cannot be decoded
* }
* @param tvb
* @param pinfo
@@ -1921,9 +1919,9 @@ fTimeValue (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset);
#if 0
/**
* BACnetVTSession ::= SEQUENCE {
- * local-vtSessionID Unsigned8,
- * remote-vtSessionID Unsigned8,
- * remote-vtAddress BACnetAddress
+ * local-vtSessionID Unsigned8,
+ * remote-vtSessionID Unsigned8,
+ * remote-vtAddress BACnetAddress
* }
* @param tvb
* @param tree
@@ -1957,14 +1955,14 @@ fWeekNDay (tvbuff_t *tvb, proto_tree *tree, guint offset);
/**
* ReadAccessResult ::= SEQUENCE {
- * objectIdentifier [0] BACnetObjectIdentifier,
- * listOfResults [1] SEQUENCE OF SEQUENCE {
- * propertyIdentifier [2] BACnetPropertyIdentifier,
- * propertyArrayIndex [3] Unsigned OPTIONAL, -- used only with array datatype if omitted with an array the entire array is referenced
- * readResult CHOICE {
- * propertyValue [4] ABSTRACT-SYNTAX.&Type,
- * propertyAccessError [5] Error
- * }
+ * objectIdentifier [0] BACnetObjectIdentifier,
+ * listOfResults [1] SEQUENCE OF SEQUENCE {
+ * propertyIdentifier [2] BACnetPropertyIdentifier,
+ * propertyArrayIndex [3] Unsigned OPTIONAL, -- used only with array datatype if omitted with an array the entire array is referenced
+ * readResult CHOICE {
+ * propertyValue [4] ABSTRACT-SYNTAX.&Type,
+ * propertyAccessError [5] Error
+ * }
* } OPTIONAL
* }
* @param tvb
@@ -1978,8 +1976,8 @@ fReadAccessResult (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint of
/**
* ReadAccessSpecification ::= SEQUENCE {
- * objectIdentifier [0] BACnetObjectIdentifier,
- * listOfPropertyReferences [1] SEQUENCE OF BACnetPropertyReference
+ * objectIdentifier [0] BACnetObjectIdentifier,
+ * listOfPropertyReferences [1] SEQUENCE OF BACnetPropertyReference
* }
* @param tvb
* @param pinfo
@@ -1992,8 +1990,8 @@ fReadAccessSpecification (tvbuff_t *tvb, packet_info *pinfo, proto_tree *subtree
/**
* WriteAccessSpecification ::= SEQUENCE {
- * objectIdentifier [0] BACnetObjectIdentifier,
- * listOfProperty [1] SEQUENCE OF BACnetPropertyValue
+ * objectIdentifier [0] BACnetObjectIdentifier,
+ * listOfProperty [1] SEQUENCE OF BACnetPropertyValue
* }
* @param tvb
* @param pinfo
@@ -2053,7 +2051,7 @@ fTimeSpan (tvbuff_t *tvb, proto_tree *tree, guint offset, const gchar *label);
/**
* BACnet Application PDUs chapter 21
* BACnetPropertyIdentifier::= ENUMERATED {
- * @see bacapp_property_identifier
+ * @see bacapp_property_identifier
* }
* @param tvb
* @param pinfo
@@ -2068,7 +2066,7 @@ fPropertyIdentifier (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint
/**
* BACnet Application PDUs chapter 21
* BACnetPropertyArrayIndex::= ENUMERATED {
- * @see bacapp_property_array_index
+ * @see bacapp_property_array_index
* }
* @param tvb
* @param tree
@@ -2081,13 +2079,13 @@ fPropertyArrayIndex (tvbuff_t *tvb, proto_tree *tree, guint offset);
/**
* listOfEventSummaries ::= SEQUENCE OF SEQUENCE {
- * objectIdentifier [0] BACnetObjectIdentifier,
- * eventState [1] BACnetEventState,
+ * objectIdentifier [0] BACnetObjectIdentifier,
+ * eventState [1] BACnetEventState,
* acknowledgedTransitions [2] BACnetEventTransitionBits,
- * eventTimeStamps [3] SEQURNCE SIZE (3) OF BACnetTimeStamps,
- * notifyType [4] BACnetNotifyType,
- * eventEnable [5] BACnetEventTransitionBits,
- * eventPriorities [6] SEQUENCE SIZE (3) OF Unsigned
+ * eventTimeStamps [3] SEQURNCE SIZE (3) OF BACnetTimeStamps,
+ * notifyType [4] BACnetNotifyType,
+ * eventEnable [5] BACnetEventTransitionBits,
+ * eventPriorities [6] SEQUENCE SIZE (3) OF Unsigned
* }
* @param tvb
* @param pinfo
@@ -2100,10 +2098,10 @@ flistOfEventSummaries (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guin
/**
* SelectionCriteria ::= SEQUENCE {
- * propertyIdentifier [0] BACnetPropertyIdentifier,
- * propertyArrayIndex [1] Unsigned OPTIONAL, -- used only with array datatype
- * relationSpecifier [2] ENUMERATED { bacapp_relationSpecifier },
- * comparisonValue [3] ABSTRACT-SYNTAX.&Type
+ * propertyIdentifier [0] BACnetPropertyIdentifier,
+ * propertyArrayIndex [1] Unsigned OPTIONAL, -- used only with array datatype
+ * relationSpecifier [2] ENUMERATED { bacapp_relationSpecifier },
+ * comparisonValue [3] ABSTRACT-SYNTAX.&Type
* }
* @param tvb
* @param pinfo
@@ -2116,8 +2114,8 @@ fSelectionCriteria (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint o
/**
* objectSelectionCriteria ::= SEQUENCE {
- * selectionLogic [0] ENUMERATED { bacapp_selectionLogic },
- * listOfSelectionCriteria [1] SelectionCriteria
+ * selectionLogic [0] ENUMERATED { bacapp_selectionLogic },
+ * listOfSelectionCriteria [1] SelectionCriteria
* }
* @param tvb
* @param pinfo
@@ -2170,7 +2168,7 @@ fAbstractSyntaxNType (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint
static guint
fBitStringTagVS (tvbuff_t *tvb, proto_tree *tree, guint offset, const gchar *label,
- const value_string *src);
+ const value_string *src);
/**
* register_bacapp
@@ -2209,7 +2207,7 @@ static GHashTable *msg_reassembled_table = NULL;
/* some necessary forward function prototypes */
static guint
fApplicationTypesEnumerated (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset,
- const gchar *label, const value_string *vs);
+ const gchar *label, const value_string *vs);
static const char *bacapp_unknown_service_str = "unknown service";
static const char *ASHRAE_Reserved_Fmt = "(%d) Reserved for Use by ASHRAE";
@@ -2217,133 +2215,133 @@ static const char *Vendor_Proprietary_Fmt = "(%d) Vendor Proprietary Value";
static const value_string
BACnetTypeName[] = {
- {0, "Confirmed-REQ"},
- {1, "Unconfirmed-REQ"},
- {2, "Simple-ACK"},
- {3, "Complex-ACK"},
- {4, "Segment-ACK"},
- {5, "Error"},
- {6, "Reject"},
- {7, "Abort"},
- {0, NULL }
+ { 0, "Confirmed-REQ"},
+ { 1, "Unconfirmed-REQ"},
+ { 2, "Simple-ACK"},
+ { 3, "Complex-ACK"},
+ { 4, "Segment-ACK"},
+ { 5, "Error"},
+ { 6, "Reject"},
+ { 7, "Abort"},
+ { 0, NULL }
};
static const true_false_string segments_follow = {
- "Segmented Request",
- "Unsegmented Request"
+ "Segmented Request",
+ "Unsegmented Request"
};
static const true_false_string more_follow = {
- "More Segments Follow",
- "No More Segments Follow"
+ "More Segments Follow",
+ "No More Segments Follow"
};
static const true_false_string segmented_accept = {
- "Segmented Response accepted",
- "Segmented Response not accepted"
+ "Segmented Response accepted",
+ "Segmented Response not accepted"
};
static const true_false_string
BACnetTagClass = {
- "Context Specific Tag",
- "Application Tag"
+ "Context Specific Tag",
+ "Application Tag"
};
static const value_string
BACnetMaxSegmentsAccepted [] = {
- {0,"Unspecified"},
- {1,"2 segments"},
- {2,"4 segments"},
- {3,"8 segments"},
- {4,"16 segments"},
- {5,"32 segments"},
- {6,"64 segments"},
- {7,"Greater than 64 segments"},
- {0,NULL }
+ { 0, "Unspecified"},
+ { 1, "2 segments"},
+ { 2, "4 segments"},
+ { 3, "8 segments"},
+ { 4, "16 segments"},
+ { 5, "32 segments"},
+ { 6, "64 segments"},
+ { 7, "Greater than 64 segments"},
+ { 0, NULL }
};
static const value_string
BACnetMaxAPDULengthAccepted [] = {
- {0,"Up to MinimumMessageSize (50 octets)"},
- {1,"Up to 128 octets"},
- {2,"Up to 206 octets (fits in a LonTalk frame)"},
- {3,"Up to 480 octets (fits in an ARCNET frame)"},
- {4,"Up to 1024 octets"},
- {5,"Up to 1476 octets (fits in an ISO 8802-3 frame)"},
- {6,"reserved by ASHRAE"},
- {7,"reserved by ASHRAE"},
- {8,"reserved by ASHRAE"},
- {9,"reserved by ASHRAE"},
- {10,"reserved by ASHRAE"},
- {11,"reserved by ASHRAE"},
- {12,"reserved by ASHRAE"},
- {13,"reserved by ASHRAE"},
- {14,"reserved by ASHRAE"},
- {15,"reserved by ASHRAE"},
- {0,NULL}
+ { 0, "Up to MinimumMessageSize (50 octets)"},
+ { 1, "Up to 128 octets"},
+ { 2, "Up to 206 octets (fits in a LonTalk frame)"},
+ { 3, "Up to 480 octets (fits in an ARCNET frame)"},
+ { 4, "Up to 1024 octets"},
+ { 5, "Up to 1476 octets (fits in an ISO 8802-3 frame)"},
+ { 6, "reserved by ASHRAE"},
+ { 7, "reserved by ASHRAE"},
+ { 8, "reserved by ASHRAE"},
+ { 9, "reserved by ASHRAE"},
+ { 10, "reserved by ASHRAE"},
+ { 11, "reserved by ASHRAE"},
+ { 12, "reserved by ASHRAE"},
+ { 13, "reserved by ASHRAE"},
+ { 14, "reserved by ASHRAE"},
+ { 15, "reserved by ASHRAE"},
+ { 0, NULL}
};
static const value_string
BACnetRejectReason [] = {
- {0,"other"},
- {1,"buffer-overflow"},
- {2,"inconsistent-parameters"},
- {3,"invalid-parameter-data-type"},
- {4,"invalid-tag"},
- {5,"missing-required-parameter"},
- {6,"parameter-out-of-range"},
- {7,"too-many-arguments"},
- {8,"undefined-enumeration"},
- {9,"unrecognized-service"},
- {0,NULL}
+ {0, "other"},
+ {1, "buffer-overflow"},
+ {2, "inconsistent-parameters"},
+ {3, "invalid-parameter-data-type"},
+ {4, "invalid-tag"},
+ {5, "missing-required-parameter"},
+ {6, "parameter-out-of-range"},
+ {7, "too-many-arguments"},
+ {8, "undefined-enumeration"},
+ {9, "unrecognized-service"},
+ {0, NULL}
};
static const value_string
BACnetRestartReason [] = {
- {0,"unknown"},
- {1,"coldstart"},
- {2,"warmstart"},
- {3,"detected-power-lost"},
- {4,"detected-powered-off"},
- {5,"hardware-watchdog"},
- {6,"software-watchdog"},
- {7,"suspended"},
- {0,NULL}
+ { 0, "unknown"},
+ { 1, "coldstart"},
+ { 2, "warmstart"},
+ { 3, "detected-power-lost"},
+ { 4, "detected-powered-off"},
+ { 5, "hardware-watchdog"},
+ { 6, "software-watchdog"},
+ { 7, "suspended"},
+ { 0, NULL}
};
static const value_string
BACnetApplicationTagNumber [] = {
- {0,"Null"},
- {1,"Boolean"},
- {2,"Unsigned Integer"},
- {3,"Signed Integer (2's complement notation)"},
- {4,"Real (ANSI/IEE-754 floating point)"},
- {5,"Double (ANSI/IEE-754 double precision floating point)"},
- {6,"Octet String"},
- {7,"Character String"},
- {8,"Bit String"},
- {9,"Enumerated"},
- {10,"Date"},
- {11,"Time"},
- {12,"BACnetObjectIdentifier"},
- {13,"reserved by ASHRAE"},
- {14,"reserved by ASHRAE"},
- {15,"reserved by ASHRAE"},
- {0,NULL}
+ { 0, "Null"},
+ { 1, "Boolean"},
+ { 2, "Unsigned Integer"},
+ { 3, "Signed Integer (2's complement notation)"},
+ { 4, "Real (ANSI/IEE-754 floating point)"},
+ { 5, "Double (ANSI/IEE-754 double precision floating point)"},
+ { 6, "Octet String"},
+ { 7, "Character String"},
+ { 8, "Bit String"},
+ { 9, "Enumerated"},
+ { 10, "Date"},
+ { 11, "Time"},
+ { 12, "BACnetObjectIdentifier"},
+ { 13, "reserved by ASHRAE"},
+ { 14, "reserved by ASHRAE"},
+ { 15, "reserved by ASHRAE"},
+ { 0, NULL}
};
static const value_string
BACnetAction [] = {
- {0,"direct"},
- {1,"reverse"},
- {0,NULL}
+ { 0, "direct"},
+ { 1, "reverse"},
+ { 0, NULL}
};
static const value_string
BACnetFileAccessMethod [] = {
- {0,"record-access"},
- {1,"stream-access"},
- {0,NULL}
+ { 0, "record-access"},
+ { 1, "stream-access"},
+ { 0, NULL}
};
/* For some reason, BACnet defines the choice parameter
@@ -2352,60 +2350,60 @@ BACnetFileAccessMethod [] = {
*/
static const value_string
BACnetFileAccessOption [] = {
- {0,"stream access"},
- {1,"record access"},
- {0,NULL}
+ { 0, "stream access"},
+ { 1, "record access"},
+ { 0, NULL}
};
static const value_string
BACnetFileStartOption [] = {
- {0, "File Start Position: "},
- {1, "File Start Record: "},
- {0, NULL}
+ { 0, "File Start Position: "},
+ { 1, "File Start Record: "},
+ { 0, NULL}
};
static const value_string
BACnetFileRequestCount [] = {
- {0, "Requested Octet Count: "},
- {1, "Requested Record Count: "},
- {0, NULL}
+ { 0, "Requested Octet Count: "},
+ { 1, "Requested Record Count: "},
+ { 0, NULL}
};
static const value_string
BACnetFileWriteInfo [] = {
- {0, "File Data: "},
- {1, "Record Count: "},
- {0, NULL}
+ { 0, "File Data: "},
+ { 1, "Record Count: "},
+ { 0, NULL}
};
static const value_string
BACnetAbortReason [] = {
- {0,"other"},
- {1,"buffer-overflow"},
- {2,"invalid-apdu-in-this-state"},
- {3,"preempted-by-higher-priority-task"},
- {4,"segmentation-not-supported"},
- {0,NULL}
+ { 0, "other"},
+ { 1, "buffer-overflow"},
+ { 2, "invalid-apdu-in-this-state"},
+ { 3, "preempted-by-higher-priority-task"},
+ { 4, "segmentation-not-supported"},
+ { 0, NULL}
};
static const value_string
BACnetLifeSafetyMode [] = {
- {0,"off"},
- {1,"on"},
- {2,"test"},
- {3,"manned"},
- {4,"unmanned"},
- {5,"armed"},
- {6,"disarmed"},
- {7,"prearmed"},
- {8,"slow"},
- {9,"fast"},
- {10,"disconnected"},
- {11,"enabled"},
- {12,"disabled"},
- {13,"atomic-release-disabled"},
- {14,"default"},
- {0,NULL}
+ { 0, "off"},
+ { 1, "on"},
+ { 2, "test"},
+ { 3, "manned"},
+ { 4, "unmanned"},
+ { 5, "armed"},
+ { 6, "disarmed"},
+ { 7, "prearmed"},
+ { 8, "slow"},
+ { 9, "fast"},
+ { 10, "disconnected"},
+ { 11, "enabled"},
+ { 12, "disabled"},
+ { 13, "atomic-release-disabled"},
+ { 14, "default"},
+ { 0, NULL}
/* Enumerated values 0-255 are reserved for definition by ASHRAE.
Enumerated values 256-65535 may be used by others subject to
procedures and constraints described in Clause 23. */
@@ -2413,17 +2411,17 @@ BACnetLifeSafetyMode [] = {
static const value_string
BACnetLifeSafetyOperation [] = {
- {0,"none"},
- {1,"silence"},
- {2,"silence-audible"},
- {3,"silence-visual"},
- {4,"reset"},
- {5,"reset-alarm"},
- {6,"reset-fault"},
- {7,"unsilence"},
- {8,"unsilence-audible"},
- {9,"unsilence-visual"},
- {0,NULL}
+ { 0, "none"},
+ { 1, "silence"},
+ { 2, "silence-audible"},
+ { 3, "silence-visual"},
+ { 4, "reset"},
+ { 5, "reset-alarm"},
+ { 6, "reset-fault"},
+ { 7, "unsilence"},
+ { 8, "unsilence-audible"},
+ { 9, "unsilence-visual"},
+ { 0, NULL}
/* Enumerated values 0-63 are reserved for definition by ASHRAE.
Enumerated values 64-65535 may be used by others subject to
procedures and constraints described in Clause 23. */
@@ -2431,38 +2429,38 @@ BACnetLifeSafetyOperation [] = {
static const value_string
BACnetLimitEnable [] = {
- {0,"lowLimitEnable"},
- {1,"highLimitEnable"},
- {0,NULL}
+ { 0, "lowLimitEnable"},
+ { 1, "highLimitEnable"},
+ { 0, NULL}
};
static const value_string
BACnetLifeSafetyState [] = {
- {0,"quiet"},
- {1,"pre-alarm"},
- {2,"alarm"},
- {3,"fault"},
- {4,"fault-pre-alarm"},
- {5,"fault-alarm"},
- {6,"not-ready"},
- {7,"active"},
- {8,"tamper"},
- {9,"test-alarm"},
- {10,"test-active"},
- {11,"test-fault"},
- {12,"test-fault-alarm"},
- {13,"holdup"},
- {14,"duress"},
- {15,"tamper-alarm"},
- {16,"abnormal"},
- {17,"emergency-power"},
- {18,"delayed"},
- {19,"blocked"},
- {20,"local-alarm"},
- {21,"general-alarm"},
- {22,"supervisory"},
- {23,"test-supervisory"},
- {0,NULL}
+ { 0, "quiet"},
+ { 1, "pre-alarm"},
+ { 2, "alarm"},
+ { 3, "fault"},
+ { 4, "fault-pre-alarm"},
+ { 5, "fault-alarm"},
+ { 6, "not-ready"},
+ { 7, "active"},
+ { 8, "tamper"},
+ { 9, "test-alarm"},
+ { 10, "test-active"},
+ { 11, "test-fault"},
+ { 12, "test-fault-alarm"},
+ { 13, "holdup"},
+ { 14, "duress"},
+ { 15, "tamper-alarm"},
+ { 16, "abnormal"},
+ { 17, "emergency-power"},
+ { 18, "delayed"},
+ { 19, "blocked"},
+ { 20, "local-alarm"},
+ { 21, "general-alarm"},
+ { 22, "supervisory"},
+ { 23, "test-supervisory"},
+ { 0, NULL}
/* Enumerated values 0-255 are reserved for definition by ASHRAE.
Enumerated values 256-65535 may be used by others subject to
procedures and constraints described in Clause 23. */
@@ -2470,143 +2468,143 @@ BACnetLifeSafetyState [] = {
static const value_string
BACnetConfirmedServiceChoice [] = {
- {0,"acknowledgeAlarm"},
- {1,"confirmedCOVNotification"},
- {2,"confirmedEventNotification"},
- {3,"getAlarmSummary"},
- {4,"getEnrollmentSummary"},
- {5,"subscribeCOV"},
- {6,"atomicReadFile"},
- {7,"atomicWriteFile"},
- {8,"addListElement"},
- {9,"removeListElement"},
- {10,"createObject"},
- {11,"deleteObject"},
- {12,"readProperty"},
- {13,"readPropertyConditional"},
- {14,"readPropertyMultiple"},
- {15,"writeProperty"},
- {16,"writePropertyMultiple"},
- {17,"deviceCommunicationControl"},
- {18,"confirmedPrivateTransfer"},
- {19,"confirmedTextMessage"},
- {20,"reinitializeDevice"},
- {21,"vtOpen"},
- {22,"vtClose"},
- {23,"vtData"},
- {24,"authenticate"},
- {25,"requestKey"},
- {26,"readRange"},
- {27,"lifeSafetyOperation"},
- {28,"subscribeCOVProperty"},
- {29,"getEventInformation"},
- {30,"reserved by ASHRAE"},
- {0, NULL}
+ { 0, "acknowledgeAlarm"},
+ { 1, "confirmedCOVNotification"},
+ { 2, "confirmedEventNotification"},
+ { 3, "getAlarmSummary"},
+ { 4, "getEnrollmentSummary"},
+ { 5, "subscribeCOV"},
+ { 6, "atomicReadFile"},
+ { 7, "atomicWriteFile"},
+ { 8, "addListElement"},
+ { 9, "removeListElement"},
+ { 10, "createObject"},
+ { 11, "deleteObject"},
+ { 12, "readProperty"},
+ { 13, "readPropertyConditional"},
+ { 14, "readPropertyMultiple"},
+ { 15, "writeProperty"},
+ { 16, "writePropertyMultiple"},
+ { 17, "deviceCommunicationControl"},
+ { 18, "confirmedPrivateTransfer"},
+ { 19, "confirmedTextMessage"},
+ { 20, "reinitializeDevice"},
+ { 21, "vtOpen"},
+ { 22, "vtClose"},
+ { 23, "vtData"},
+ { 24, "authenticate"},
+ { 25, "requestKey"},
+ { 26, "readRange"},
+ { 27, "lifeSafetyOperation"},
+ { 28, "subscribeCOVProperty"},
+ { 29, "getEventInformation"},
+ { 30, "reserved by ASHRAE"},
+ { 0, NULL}
};
static const value_string
BACnetReliability [] = {
- {0,"no-fault-detected"},
- {1,"no-sensor"},
- {2,"over-range"},
- {3,"under-range"},
- {4,"open-loop"},
- {5,"shorted-loop"},
- {6,"no-output"},
- {7,"unreliable-other"},
- {8,"process-error"},
- {9,"multi-state-fault"},
- {10,"configuration-error"},
- /* enumeration value 11 is reserved for a future addendum */
- {12,"communication-failure"},
- {13,"member-fault"},
- {0,NULL}
+ { 0, "no-fault-detected"},
+ { 1, "no-sensor"},
+ { 2, "over-range"},
+ { 3, "under-range"},
+ { 4, "open-loop"},
+ { 5, "shorted-loop"},
+ { 6, "no-output"},
+ { 7, "unreliable-other"},
+ { 8, "process-error"},
+ { 9, "multi-state-fault"},
+ { 10, "configuration-error"},
+ /* enumeration value 11 is reserved for a future addendum */
+ { 12, "communication-failure"},
+ { 13, "member-fault"},
+ { 0, NULL}
};
static const value_string
BACnetUnconfirmedServiceChoice [] = {
- {0,"i-Am"},
- {1,"i-Have"},
- {2,"unconfirmedCOVNotification"},
- {3,"unconfirmedEventNotification"},
- {4,"unconfirmedPrivateTransfer"},
- {5,"unconfirmedTextMessage"},
- {6,"timeSynchronization"},
- {7,"who-Has"},
- {8,"who-Is"},
- {9,"utcTimeSynchonization"},
- {0,NULL}
+ { 0, "i-Am"},
+ { 1, "i-Have"},
+ { 2, "unconfirmedCOVNotification"},
+ { 3, "unconfirmedEventNotification"},
+ { 4, "unconfirmedPrivateTransfer"},
+ { 5, "unconfirmedTextMessage"},
+ { 6, "timeSynchronization"},
+ { 7, "who-Has"},
+ { 8, "who-Is"},
+ { 9, "utcTimeSynchonization"},
+ { 0, NULL}
};
static const value_string
BACnetUnconfirmedServiceRequest [] = {
- {0,"i-Am-Request"},
- {1,"i-Have-Request"},
- {2,"unconfirmedCOVNotification-Request"},
- {3,"unconfirmedEventNotification-Request"},
- {4,"unconfirmedPrivateTransfer-Request"},
- {5,"unconfirmedTextMessage-Request"},
- {6,"timeSynchronization-Request"},
- {7,"who-Has-Request"},
- {8,"who-Is-Request"},
- {9,"utcTimeSynchonization-Request"},
- {0,NULL}
+ { 0, "i-Am-Request"},
+ { 1, "i-Have-Request"},
+ { 2, "unconfirmedCOVNotification-Request"},
+ { 3, "unconfirmedEventNotification-Request"},
+ { 4, "unconfirmedPrivateTransfer-Request"},
+ { 5, "unconfirmedTextMessage-Request"},
+ { 6, "timeSynchronization-Request"},
+ { 7, "who-Has-Request"},
+ { 8, "who-Is-Request"},
+ { 9, "utcTimeSynchonization-Request"},
+ { 0, NULL}
};
static const value_string
BACnetObjectType [] = {
- {0,"analog-input"},
- {1,"analog-output"},
- {2,"analog-value"},
- {3,"binary-input"},
- {4,"binary-output"},
- {5,"binary-value"},
- {6,"calendar"},
- {7,"command"},
- {8,"device"},
- {9,"event-enrollment"},
- {10,"file"},
- {11,"group"},
- {12,"loop"},
- {13,"multi-state-input"},
- {14,"multi-state-output"},
- {15,"notification-class"},
- {16,"program"},
- {17,"schedule"},
- {18,"averaging"},
- {19,"multi-state-value"},
- {20,"trend-log"},
- {21,"life-safety-point"},
- {22,"life-safety-zone"},
- {23,"accumulator"},
- {24,"pulse-converter"},
- {25,"event-log"},
- {26,"global-group"},
- {27,"trend-log-multiple"},
- {28,"load-control"},
- {29,"structured-view"},
- {30,"access-door"}, /* 30-37 added with addanda 135-2008j */
- /* value 31 is unassigned */
- {32,"access-credential"},
- {33,"access-point"},
- {34,"access-rights"},
- {35,"access-user"},
- {36,"access-zone"},
- {37,"credential-data-input"},
- {38,"network-security"},
- {39,"bitstring-value"}, /* 39-50 added with addenda 135-2008w */
- {40,"characterstring-value"},
- {41,"date-pattern-value"},
- {42,"date-value"},
- {43,"datetime-pattern-value"},
- {44,"datetime-value"},
- {45,"integer-value"},
- {46,"large-analog-value"},
- {47,"octetstring-value"},
- {48,"positive-integer-value"},
- {49,"time-pattern-value"},
- {50,"time-value"},
- {0, NULL}
+ { 0, "analog-input"},
+ { 1, "analog-output"},
+ { 2, "analog-value"},
+ { 3, "binary-input"},
+ { 4, "binary-output"},
+ { 5, "binary-value"},
+ { 6, "calendar"},
+ { 7, "command"},
+ { 8, "device"},
+ { 9, "event-enrollment"},
+ { 10, "file"},
+ { 11, "group"},
+ { 12, "loop"},
+ { 13, "multi-state-input"},
+ { 14, "multi-state-output"},
+ { 15, "notification-class"},
+ { 16, "program"},
+ { 17, "schedule"},
+ { 18, "averaging"},
+ { 19, "multi-state-value"},
+ { 20, "trend-log"},
+ { 21, "life-safety-point"},
+ { 22, "life-safety-zone"},
+ { 23, "accumulator"},
+ { 24, "pulse-converter"},
+ { 25, "event-log"},
+ { 26, "global-group"},
+ { 27, "trend-log-multiple"},
+ { 28, "load-control"},
+ { 29, "structured-view"},
+ { 30, "access-door"}, /* 30-37 added with addanda 135-2008j */
+ /* value 31 is unassigned */
+ { 32, "access-credential"},
+ { 33, "access-point"},
+ { 34, "access-rights"},
+ { 35, "access-user"},
+ { 36, "access-zone"},
+ { 37, "credential-data-input"},
+ { 38, "network-security"},
+ { 39, "bitstring-value"}, /* 39-50 added with addenda 135-2008w */
+ { 40, "characterstring-value"},
+ { 41, "date-pattern-value"},
+ { 42, "date-value"},
+ { 43, "datetime-pattern-value"},
+ { 44, "datetime-value"},
+ { 45, "integer-value"},
+ { 46, "large-analog-value"},
+ { 47, "octetstring-value"},
+ { 48, "positive-integer-value"},
+ { 49, "time-pattern-value"},
+ { 50, "time-value"},
+ { 0, NULL}
/* Enumerated values 0-127 are reserved for definition by ASHRAE.
Enumerated values 128-1023 may be used by others subject to
the procedures and constraints described in Clause 23. */
@@ -2614,244 +2612,244 @@ BACnetObjectType [] = {
static const value_string
BACnetEngineeringUnits [] = {
- {0,"Sq Meters"},
- {1,"Sq Feet"},
- {2,"Milliamperes"},
- {3,"Amperes"},
- {4,"Ohms"},
- {5,"Volts"},
- {6,"Kilovolts"},
- {7,"Megavolts"},
- {8,"Volt Amperes"},
- {9,"Kilovolt Amperes"},
- {10,"Megavolt Amperes"},
- {11,"Volt Amperes Reactive"},
- {12,"Kilovolt Amperes Reactive"},
- {13,"Megavolt Amperes Reactive"},
- {14,"Degrees Phase"},
- {15,"Power Factor"},
- {16,"Joules"},
- {17,"Kilojoules"},
- {18,"Watt Hours"},
- {19,"Kilowatt Hours"},
- {20,"BTUs"},
- {21,"Therms"},
- {22,"Ton Hours"},
- {23,"Joules Per Kg Dry Air"},
- {24,"BTUs Per Pound Dry Air"},
- {25,"Cycles Per Hour"},
- {26,"Cycles Per Minute"},
- {27,"Hertz"},
- {28,"Grams Of Water Per Kilogram Dry Air"},
- {29,"Relative Humidity"},
- {30,"Millimeters"},
- {31,"Meters"},
- {32,"Inches"},
- {33,"Feed"},
- {34,"Watts Per Sq Foot"},
- {35,"Watts Per Sq meter"},
- {36,"Lumens"},
- {37,"Lux"},
- {38,"Foot Candles"},
- {39,"Kilograms"},
- {40,"Pounds Mass"},
- {41,"Tons"},
- {42,"Kgs per Second"},
- {43,"Kgs Per Minute"},
- {44,"Kgs Per Hour"},
- {45,"Pounds Mass Per Minute"},
- {46,"Pounds Mass Per Hour"},
- {47,"Watt"},
- {48,"Kilowatts"},
- {49,"Megawatts"},
- {50,"BTUs Per Hour"},
- {51,"Horsepower"},
- {52,"Tons Refrigeration"},
- {53,"Pascals"},
- {54,"Kilopascals"},
- {55,"Bars"},
- {56,"Pounds Force Per Square Inch"},
- {57,"Centimeters Of Water"},
- {58,"Inches Of Water"},
- {59,"Millimeters Of Mercury"},
- {60,"Centimeters Of Mercury"},
- {61,"Inches Of Mercury"},
- {62,"Degrees Celsius"},
- {63,"Degrees Kelvin"},
- {64,"Degrees Fahrenheit"},
- {65,"Degree Days Celsius"},
- {66,"Degree Days Fahrenheit"},
- {67,"Years"},
- {68,"Months"},
- {69,"Weeks"},
- {70,"Days"},
- {71,"Hours"},
- {72,"Minutes"},
- {73,"Seconds"},
- {74,"Meters Per Second"},
- {75,"Kilometers Per Hour"},
- {76,"Feed Per Second"},
- {77,"Feet Per Minute"},
- {78,"Miles Per Hour"},
- {79,"Cubic Feet"},
- {80,"Cubic Meters"},
- {81,"Imperial Gallons"},
- {82,"Liters"},
- {83,"US Gallons"},
- {84,"Cubic Feet Per Minute"},
- {85,"Cubic Meters Per Second"},
- {86,"Imperial Gallons Per Minute"},
- {87,"Liters Per Second"},
- {88,"Liters Per Minute"},
- {89,"US Gallons Per Minute"},
- {90,"Degrees Angular"},
- {91,"Degrees Celsius Per Hour"},
- {92,"Degrees Celsius Per Minute"},
- {93,"Degrees Fahrenheit Per Hour"},
- {94,"Degrees Fahrenheit Per Minute"},
- {95,"No Units"},
- {96,"Parts Per Million"},
- {97,"Parts Per Billion"},
- {98,"Percent"},
- {99,"Pecent Per Second"},
- {100,"Per Minute"},
- {101,"Per Second"},
- {102,"Psi Per Degree Fahrenheit"},
- {103,"Radians"},
- {104,"Revolutions Per Min"},
- {105,"Currency1"},
- {106,"Currency2"},
- {107,"Currency3"},
- {108,"Currency4"},
- {109,"Currency5"},
- {110,"Currency6"},
- {111,"Currency7"},
- {112,"Currency8"},
- {113,"Currency9"},
- {114,"Currency10"},
- {115,"Sq Inches"},
- {116,"Sq Centimeters"},
- {117,"BTUs Per Pound"},
- {118,"Centimeters"},
- {119,"Pounds Mass Per Second"},
- {120,"Delta Degrees Fahrenheit"},
- {121,"Delta Degrees Kelvin"},
- {122,"Kilohms"},
- {123,"Megohms"},
- {124,"Millivolts"},
- {125,"Kilojoules Per Kg"},
- {126,"Megajoules"},
- {127,"Joules Per Degree Kelvin"},
- {128,"Joules Per Kg Degree Kelvin"},
- {129,"Kilohertz"},
- {130,"Megahertz"},
- {131,"Per Hour"},
- {132,"Milliwatts"},
- {133,"Hectopascals"},
- {134,"Millibars"},
- {135,"Cubic Meters Per Hour"},
- {136,"Liters Per Hour"},
- {137,"KWatt Hours Per Square Meter"},
- {138,"KWatt Hours Per Square Foot"},
- {139,"Megajoules Per Square Meter"},
- {140,"Megajoules Per Square Foot"},
- {141,"Watts Per Sq Meter Degree Kelvin"},
- {142,"Cubic Feet Per Second"},
- {143,"Percent Obstruction Per Foot"},
- {144,"Percent Obstruction Per Meter"},
- {145,"milliohms"},
- {146,"megawatt-hours"},
- {147,"kilo-btus"},
- {148,"mega-btus"},
- {149,"kilojoules-per-kilogram-dry-air"},
- {150,"megajoules-per-kilogram-dry-air"},
- {151,"kilojoules-per-degree-Kelvin"},
- {152,"megajoules-per-degree-Kelvin"},
- {153,"newton"},
- {154,"grams-per-second"},
- {155,"grams-per-minute"},
- {156,"tons-per-hour"},
- {157,"kilo-btus-per-hour"},
- {158,"hundredths-seconds"},
- {159,"milliseconds"},
- {160,"newton-meters"},
- {161,"millimeters-per-second"},
- {162,"millimeters-per-minute"},
- {163,"meters-per-minute"},
- {164,"meters-per-hour"},
- {165,"cubic-meters-per-minute"},
- {166,"meters-per-second-per-second"},
- {167,"amperes-per-meter"},
- {168,"amperes-per-square-meter"},
- {169,"ampere-square-meters"},
- {170,"farads"},
- {171,"henrys"},
- {172,"ohm-meters"},
- {173,"siemens"},
- {174,"siemens-per-meter"},
- {175,"teslas"},
- {176,"volts-per-degree-Kelvin"},
- {177,"volts-per-meter"},
- {178,"webers"},
- {179,"candelas"},
- {180,"candelas-per-square-meter"},
- {181,"degrees-Kelvin-per-hour"},
- {182,"degrees-Kelvin-per-minute"},
- {183,"joule-seconds"},
- {184,"radians-per-second"},
- {185,"square-meters-per-Newton"},
- {186,"kilograms-per-cubic-meter"},
- {187,"newton-seconds"},
- {188,"newtons-per-meter"},
- {189,"watts-per-meter-per-degree-Kelvin"},
- {190,"micro-siemens"},
- {191,"cubic-feet-per-hour"},
- {192,"us-gallons-per-hour"},
- {193,"kilometers"},
- {194,"micrometers"},
- {195,"grams"},
- {196,"milligrams"},
- {197,"milliliters"},
- {198,"milliliters-per-second"},
- {199,"decibels"},
- {200,"decibels-millivolt"},
- {201,"decibels-volt"},
- {202,"millisiemens"},
- {203,"watt-hours-reactive"},
- {204,"kilowatt-hours-reactive"},
- {205,"megawatt-hours-reactive"},
- {206,"millimeters-of-water"},
- {207,"per-mille"},
- {208,"grams-per-gram"},
- {209,"kilograms-per-kilogram"},
- {210,"grams-per-kilogram"},
- {211,"milligrams-per-gram"},
- {212,"milligrams-per-kilogram"},
- {213,"grams-per-milliliter"},
- {214,"grams-per-liter"},
- {215,"milligrams-per-liter"},
- {216,"micrograms-per-liter"},
- {217,"grams-per-cubic-meter"},
- {218,"milligrams-per-cubic-meter"},
- {219,"micrograms-per-cubic-meter"},
- {220,"nanograms-per-cubic-meter"},
- {221,"grams-per-cubic-centimeter"},
- {222,"becquerels"},
- {223,"kilobecquerels"},
- {224,"megabecquerels"},
- {225,"gray"},
- {226,"milligray"},
- {227,"microgray"},
- {228,"sieverts"},
- {229,"millisieverts"},
- {230,"microsieverts"},
- {231,"microsieverts-per-hour"},
- {232,"decibels-a"},
- {233,"nephelometric-turbidity-unit"},
- {234,"pH"},
- {235,"grams-per-square-meter"},
- {236,"minutes-per-degree-kelvin"},
- {0,NULL}
+ { 0, "Sq Meters"},
+ { 1, "Sq Feet"},
+ { 2, "Milliamperes"},
+ { 3, "Amperes"},
+ { 4, "Ohms"},
+ { 5, "Volts"},
+ { 6, "Kilovolts"},
+ { 7, "Megavolts"},
+ { 8, "Volt Amperes"},
+ { 9, "Kilovolt Amperes"},
+ { 10, "Megavolt Amperes"},
+ { 11, "Volt Amperes Reactive"},
+ { 12, "Kilovolt Amperes Reactive"},
+ { 13, "Megavolt Amperes Reactive"},
+ { 14, "Degrees Phase"},
+ { 15, "Power Factor"},
+ { 16, "Joules"},
+ { 17, "Kilojoules"},
+ { 18, "Watt Hours"},
+ { 19, "Kilowatt Hours"},
+ { 20, "BTUs"},
+ { 21, "Therms"},
+ { 22, "Ton Hours"},
+ { 23, "Joules Per Kg Dry Air"},
+ { 24, "BTUs Per Pound Dry Air"},
+ { 25, "Cycles Per Hour"},
+ { 26, "Cycles Per Minute"},
+ { 27, "Hertz"},
+ { 28, "Grams Of Water Per Kilogram Dry Air"},
+ { 29, "Relative Humidity"},
+ { 30, "Millimeters"},
+ { 31, "Meters"},
+ { 32, "Inches"},
+ { 33, "Feed"},
+ { 34, "Watts Per Sq Foot"},
+ { 35, "Watts Per Sq meter"},
+ { 36, "Lumens"},
+ { 37, "Lux"},
+ { 38, "Foot Candles"},
+ { 39, "Kilograms"},
+ { 40, "Pounds Mass"},
+ { 41, "Tons"},
+ { 42, "Kgs per Second"},
+ { 43, "Kgs Per Minute"},
+ { 44, "Kgs Per Hour"},
+ { 45, "Pounds Mass Per Minute"},
+ { 46, "Pounds Mass Per Hour"},
+ { 47, "Watt"},
+ { 48, "Kilowatts"},
+ { 49, "Megawatts"},
+ { 50, "BTUs Per Hour"},
+ { 51, "Horsepower"},
+ { 52, "Tons Refrigeration"},
+ { 53, "Pascals"},
+ { 54, "Kilopascals"},
+ { 55, "Bars"},
+ { 56, "Pounds Force Per Square Inch"},
+ { 57, "Centimeters Of Water"},
+ { 58, "Inches Of Water"},
+ { 59, "Millimeters Of Mercury"},
+ { 60, "Centimeters Of Mercury"},
+ { 61, "Inches Of Mercury"},
+ { 62, "Degrees Celsius"},
+ { 63, "Degrees Kelvin"},
+ { 64, "Degrees Fahrenheit"},
+ { 65, "Degree Days Celsius"},
+ { 66, "Degree Days Fahrenheit"},
+ { 67, "Years"},
+ { 68, "Months"},
+ { 69, "Weeks"},
+ { 70, "Days"},
+ { 71, "Hours"},
+ { 72, "Minutes"},
+ { 73, "Seconds"},
+ { 74, "Meters Per Second"},
+ { 75, "Kilometers Per Hour"},
+ { 76, "Feed Per Second"},
+ { 77, "Feet Per Minute"},
+ { 78, "Miles Per Hour"},
+ { 79, "Cubic Feet"},
+ { 80, "Cubic Meters"},
+ { 81, "Imperial Gallons"},
+ { 82, "Liters"},
+ { 83, "US Gallons"},
+ { 84, "Cubic Feet Per Minute"},
+ { 85, "Cubic Meters Per Second"},
+ { 86, "Imperial Gallons Per Minute"},
+ { 87, "Liters Per Second"},
+ { 88, "Liters Per Minute"},
+ { 89, "US Gallons Per Minute"},
+ { 90, "Degrees Angular"},
+ { 91, "Degrees Celsius Per Hour"},
+ { 92, "Degrees Celsius Per Minute"},
+ { 93, "Degrees Fahrenheit Per Hour"},
+ { 94, "Degrees Fahrenheit Per Minute"},
+ { 95, "No Units"},
+ { 96, "Parts Per Million"},
+ { 97, "Parts Per Billion"},
+ { 98, "Percent"},
+ { 99, "Pecent Per Second"},
+ { 100, "Per Minute"},
+ { 101, "Per Second"},
+ { 102, "Psi Per Degree Fahrenheit"},
+ { 103, "Radians"},
+ { 104, "Revolutions Per Min"},
+ { 105, "Currency1"},
+ { 106, "Currency2"},
+ { 107, "Currency3"},
+ { 108, "Currency4"},
+ { 109, "Currency5"},
+ { 110, "Currency6"},
+ { 111, "Currency7"},
+ { 112, "Currency8"},
+ { 113, "Currency9"},
+ { 114, "Currency10"},
+ { 115, "Sq Inches"},
+ { 116, "Sq Centimeters"},
+ { 117, "BTUs Per Pound"},
+ { 118, "Centimeters"},
+ { 119, "Pounds Mass Per Second"},
+ { 120, "Delta Degrees Fahrenheit"},
+ { 121, "Delta Degrees Kelvin"},
+ { 122, "Kilohms"},
+ { 123, "Megohms"},
+ { 124, "Millivolts"},
+ { 125, "Kilojoules Per Kg"},
+ { 126, "Megajoules"},
+ { 127, "Joules Per Degree Kelvin"},
+ { 128, "Joules Per Kg Degree Kelvin"},
+ { 129, "Kilohertz"},
+ { 130, "Megahertz"},
+ { 131, "Per Hour"},
+ { 132, "Milliwatts"},
+ { 133, "Hectopascals"},
+ { 134, "Millibars"},
+ { 135, "Cubic Meters Per Hour"},
+ { 136, "Liters Per Hour"},
+ { 137, "KWatt Hours Per Square Meter"},
+ { 138, "KWatt Hours Per Square Foot"},
+ { 139, "Megajoules Per Square Meter"},
+ { 140, "Megajoules Per Square Foot"},
+ { 141, "Watts Per Sq Meter Degree Kelvin"},
+ { 142, "Cubic Feet Per Second"},
+ { 143, "Percent Obstruction Per Foot"},
+ { 144, "Percent Obstruction Per Meter"},
+ { 145, "milliohms"},
+ { 146, "megawatt-hours"},
+ { 147, "kilo-btus"},
+ { 148, "mega-btus"},
+ { 149, "kilojoules-per-kilogram-dry-air"},
+ { 150, "megajoules-per-kilogram-dry-air"},
+ { 151, "kilojoules-per-degree-Kelvin"},
+ { 152, "megajoules-per-degree-Kelvin"},
+ { 153, "newton"},
+ { 154, "grams-per-second"},
+ { 155, "grams-per-minute"},
+ { 156, "tons-per-hour"},
+ { 157, "kilo-btus-per-hour"},
+ { 158, "hundredths-seconds"},
+ { 159, "milliseconds"},
+ { 160, "newton-meters"},
+ { 161, "millimeters-per-second"},
+ { 162, "millimeters-per-minute"},
+ { 163, "meters-per-minute"},
+ { 164, "meters-per-hour"},
+ { 165, "cubic-meters-per-minute"},
+ { 166, "meters-per-second-per-second"},
+ { 167, "amperes-per-meter"},
+ { 168, "amperes-per-square-meter"},
+ { 169, "ampere-square-meters"},
+ { 170, "farads"},
+ { 171, "henrys"},
+ { 172, "ohm-meters"},
+ { 173, "siemens"},
+ { 174, "siemens-per-meter"},
+ { 175, "teslas"},
+ { 176, "volts-per-degree-Kelvin"},
+ { 177, "volts-per-meter"},
+ { 178, "webers"},
+ { 179, "candelas"},
+ { 180, "candelas-per-square-meter"},
+ { 181, "degrees-Kelvin-per-hour"},
+ { 182, "degrees-Kelvin-per-minute"},
+ { 183, "joule-seconds"},
+ { 184, "radians-per-second"},
+ { 185, "square-meters-per-Newton"},
+ { 186, "kilograms-per-cubic-meter"},
+ { 187, "newton-seconds"},
+ { 188, "newtons-per-meter"},
+ { 189, "watts-per-meter-per-degree-Kelvin"},
+ { 190, "micro-siemens"},
+ { 191, "cubic-feet-per-hour"},
+ { 192, "us-gallons-per-hour"},
+ { 193, "kilometers"},
+ { 194, "micrometers"},
+ { 195, "grams"},
+ { 196, "milligrams"},
+ { 197, "milliliters"},
+ { 198, "milliliters-per-second"},
+ { 199, "decibels"},
+ { 200, "decibels-millivolt"},
+ { 201, "decibels-volt"},
+ { 202, "millisiemens"},
+ { 203, "watt-hours-reactive"},
+ { 204, "kilowatt-hours-reactive"},
+ { 205, "megawatt-hours-reactive"},
+ { 206, "millimeters-of-water"},
+ { 207, "per-mille"},
+ { 208, "grams-per-gram"},
+ { 209, "kilograms-per-kilogram"},
+ { 210, "grams-per-kilogram"},
+ { 211, "milligrams-per-gram"},
+ { 212, "milligrams-per-kilogram"},
+ { 213, "grams-per-milliliter"},
+ { 214, "grams-per-liter"},
+ { 215, "milligrams-per-liter"},
+ { 216, "micrograms-per-liter"},
+ { 217, "grams-per-cubic-meter"},
+ { 218, "milligrams-per-cubic-meter"},
+ { 219, "micrograms-per-cubic-meter"},
+ { 220, "nanograms-per-cubic-meter"},
+ { 221, "grams-per-cubic-centimeter"},
+ { 222, "becquerels"},
+ { 223, "kilobecquerels"},
+ { 224, "megabecquerels"},
+ { 225, "gray"},
+ { 226, "milligray"},
+ { 227, "microgray"},
+ { 228, "sieverts"},
+ { 229, "millisieverts"},
+ { 230, "microsieverts"},
+ { 231, "microsieverts-per-hour"},
+ { 232, "decibels-a"},
+ { 233, "nephelometric-turbidity-unit"},
+ { 234, "pH"},
+ { 235, "grams-per-square-meter"},
+ { 236, "minutes-per-degree-kelvin"},
+ { 0, NULL}
/* Enumerated values 0-255 are reserved for definition by ASHRAE.
Enumerated values 256-65535 may be used by others subject to
the procedures and constraints described in Clause 23. */
@@ -2859,122 +2857,122 @@ BACnetEngineeringUnits [] = {
static const value_string
BACnetErrorCode [] = {
- {0,"other"},
- {1,"authentication-failed"},
- {2,"configuration-in-progress"},
- {3,"device-busy"},
- {4,"dynamic-creation-not-supported"},
- {5,"file-access-denied"},
- {6,"incompatible-security-levels"},
- {7,"inconsistent-parameters"},
- {8,"inconsistent-selection-criterion"},
- {9,"invalid-data-type"},
- {10,"invalid-file-access-method"},
- {11,"invalid-file-start-position"},
- {12,"invalid-operator-name"},
- {13,"invalid-parameter-data-type"},
- {14,"invalid-time-stamp"},
- {15,"key-generation-error"},
- {16,"missing-required-parameter"},
- {17,"no-objects-of-specified-type"},
- {18,"no-space-for-object"},
- {19,"no-space-to-add-list-element"},
- {20,"no-space-to-write-property"},
- {21,"no-vt-sessions-available"},
- {22,"property-is-not-a-list"},
- {23,"object-deletion-not-permitted"},
- {24,"object-identifier-already-exists"},
- {25,"operational-problem"},
- {26,"password-failure"},
- {27,"read-access-denied"},
- {28,"security-not-supported"},
- {29,"service-request-denied"},
- {30,"timeout"},
- {31,"unknown-object"},
- {32,"unknown-property"},
- {33,"removed enumeration"},
- {34,"unknown-vt-class"},
- {35,"unknown-vt-session"},
- {36,"unsupported-object-type"},
- {37,"value-out-of-range"},
- {38,"vt-session-already-closed"},
- {39,"vt-session-termination-failure"},
- {40,"write-access-denied"},
- {41,"character-set-not-supported"},
- {42,"invalid-array-index"},
- {43,"cov-subscription-failed"},
- {44,"not-cov-property"},
- {45,"optional-functionality-not-supported"},
- {46,"invalid-configuration-data"},
- {47,"datatype-not-supported"},
- {48,"duplicate-name"},
- {49,"duplicate-object-id"},
- {50,"property-is-not-an-array"},
- {73,"invalid-event-state"},
- {74,"no-alarm-configured"},
- {75,"log-buffer-full"},
- {76,"logged-value-purged"},
- {77,"no-property-specified"},
- {78,"not-configured-for-triggered-logging"},
- {79,"unknown-subscription"},
- {80,"parameter-out-of-range"},
- {81,"list-element-not-found"},
- {82,"busy"},
- {83,"communication-disabled"},
- {84,"success"},
- {85,"access-denied"},
- {86,"bad-destination-address"},
- {87,"bad-destination-device-id"},
- {88,"bad-signature"},
- {89,"bad-source-address"},
- {90,"bad-timestamp"},
- {91,"cannot-use-key"},
- {92,"cannot-verify-message-id"},
- {93,"correct-key-revision"},
- {94,"destination-device-id-required"},
- {95,"duplicate-message"},
- {96,"encryption-not-configured"},
- {97,"encryption-required"},
- {98,"incorrect-key"},
- {99,"invalid-key-data"},
- {100,"key-update-in-progress"},
- {101,"malformed-message"},
- {102,"not-key-server"},
- {103,"security-not-configured"},
- {104,"source-security-required"},
- {105,"too-many-keys"},
- {106,"unknown-authentication-type"},
- {107,"unknown-key"},
- {108,"unknown-key-revision"},
- {109,"unknown-source-message"},
- {110,"not-router-to-dnet"},
- {111,"router-busy"},
- {112,"unknown-network-message"},
- {113,"message-too-long"},
- {114,"security-error"},
- {115,"addressing-error"},
- {116,"write-bdt-failed"},
- {117,"read-bdt-failed"},
- {118,"register-foreign-device-failed"},
- {119,"read-fdt-failed"},
- {120,"delete-fdt-entry-failed"},
- {121,"distribute-broadcast-failed"},
- {122,"unknown-file-size"},
- {123,"abort-apdu-too-long"},
- {124,"abort-application-exceeded-reply-time"},
- {125,"abort-out-of-resources"},
- {126,"abort-tsm-timeout"},
- {127,"abort-window-size-out-of-range"},
- {128,"file-full"},
- {129,"inconsistent-configuration"},
- {130,"inconsistent-object-type"},
- {131,"internal-error"},
- {132,"not-configured"},
- {133,"out-of-memory"},
- {134,"value-too-long"},
- {135,"abort-insufficient-security"},
- {136,"abort-security-error"},
- {0, NULL}
+ { 0, "other"},
+ { 1, "authentication-failed"},
+ { 2, "configuration-in-progress"},
+ { 3, "device-busy"},
+ { 4, "dynamic-creation-not-supported"},
+ { 5, "file-access-denied"},
+ { 6, "incompatible-security-levels"},
+ { 7, "inconsistent-parameters"},
+ { 8, "inconsistent-selection-criterion"},
+ { 9, "invalid-data-type"},
+ { 10, "invalid-file-access-method"},
+ { 11, "invalid-file-start-position"},
+ { 12, "invalid-operator-name"},
+ { 13, "invalid-parameter-data-type"},
+ { 14, "invalid-time-stamp"},
+ { 15, "key-generation-error"},
+ { 16, "missing-required-parameter"},
+ { 17, "no-objects-of-specified-type"},
+ { 18, "no-space-for-object"},
+ { 19, "no-space-to-add-list-element"},
+ { 20, "no-space-to-write-property"},
+ { 21, "no-vt-sessions-available"},
+ { 22, "property-is-not-a-list"},
+ { 23, "object-deletion-not-permitted"},
+ { 24, "object-identifier-already-exists"},
+ { 25, "operational-problem"},
+ { 26, "password-failure"},
+ { 27, "read-access-denied"},
+ { 28, "security-not-supported"},
+ { 29, "service-request-denied"},
+ { 30, "timeout"},
+ { 31, "unknown-object"},
+ { 32, "unknown-property"},
+ { 33, "removed enumeration"},
+ { 34, "unknown-vt-class"},
+ { 35, "unknown-vt-session"},
+ { 36, "unsupported-object-type"},
+ { 37, "value-out-of-range"},
+ { 38, "vt-session-already-closed"},
+ { 39, "vt-session-termination-failure"},
+ { 40, "write-access-denied"},
+ { 41, "character-set-not-supported"},
+ { 42, "invalid-array-index"},
+ { 43, "cov-subscription-failed"},
+ { 44, "not-cov-property"},
+ { 45, "optional-functionality-not-supported"},
+ { 46, "invalid-configuration-data"},
+ { 47, "datatype-not-supported"},
+ { 48, "duplicate-name"},
+ { 49, "duplicate-object-id"},
+ { 50, "property-is-not-an-array"},
+ { 73, "invalid-event-state"},
+ { 74, "no-alarm-configured"},
+ { 75, "log-buffer-full"},
+ { 76, "logged-value-purged"},
+ { 77, "no-property-specified"},
+ { 78, "not-configured-for-triggered-logging"},
+ { 79, "unknown-subscription"},
+ { 80, "parameter-out-of-range"},
+ { 81, "list-element-not-found"},
+ { 82, "busy"},
+ { 83, "communication-disabled"},
+ { 84, "success"},
+ { 85, "access-denied"},
+ { 86, "bad-destination-address"},
+ { 87, "bad-destination-device-id"},
+ { 88, "bad-signature"},
+ { 89, "bad-source-address"},
+ { 90, "bad-timestamp"},
+ { 91, "cannot-use-key"},
+ { 92, "cannot-verify-message-id"},
+ { 93, "correct-key-revision"},
+ { 94, "destination-device-id-required"},
+ { 95, "duplicate-message"},
+ { 96, "encryption-not-configured"},
+ { 97, "encryption-required"},
+ { 98, "incorrect-key"},
+ { 99, "invalid-key-data"},
+ { 100, "key-update-in-progress"},
+ { 101, "malformed-message"},
+ { 102, "not-key-server"},
+ { 103, "security-not-configured"},
+ { 104, "source-security-required"},
+ { 105, "too-many-keys"},
+ { 106, "unknown-authentication-type"},
+ { 107, "unknown-key"},
+ { 108, "unknown-key-revision"},
+ { 109, "unknown-source-message"},
+ { 110, "not-router-to-dnet"},
+ { 111, "router-busy"},
+ { 112, "unknown-network-message"},
+ { 113, "message-too-long"},
+ { 114, "security-error"},
+ { 115, "addressing-error"},
+ { 116, "write-bdt-failed"},
+ { 117, "read-bdt-failed"},
+ { 118, "register-foreign-device-failed"},
+ { 119, "read-fdt-failed"},
+ { 120, "delete-fdt-entry-failed"},
+ { 121, "distribute-broadcast-failed"},
+ { 122, "unknown-file-size"},
+ { 123, "abort-apdu-too-long"},
+ { 124, "abort-application-exceeded-reply-time"},
+ { 125, "abort-out-of-resources"},
+ { 126, "abort-tsm-timeout"},
+ { 127, "abort-window-size-out-of-range"},
+ { 128, "file-full"},
+ { 129, "inconsistent-configuration"},
+ { 130, "inconsistent-object-type"},
+ { 131, "internal-error"},
+ { 132, "not-configured"},
+ { 133, "out-of-memory"},
+ { 134, "value-too-long"},
+ { 135, "abort-insufficient-security"},
+ { 136, "abort-security-error"},
+ { 0, NULL}
/* Enumerated values 0-255 are reserved for definition by ASHRAE.
Enumerated values 256-65535 may be used by others subject to the
procedures and constraints described in Clause 23. */
@@ -2982,345 +2980,345 @@ BACnetErrorCode [] = {
static const value_string
BACnetPropertyIdentifier [] = {
- {0,"acked-transition"},
- {1,"ack-required"},
- {2,"action"},
- {3,"action-text"},
- {4,"active-text"},
- {5,"active-vt-session"},
- {6,"alarm-value"},
- {7,"alarm-values"},
- {8,"all"},
- {9,"all-write-successful"},
- {10,"apdu-segment-timeout"},
- {11,"apdu-timeout"},
- {12,"application-software-version"},
- {13,"archive"},
- {14,"bias"},
- {15,"change-of-state-count"},
- {16,"change-of-state-time"},
- {17,"notification-class"},
- {18,"the property in this place was deleted"},
- {19,"controlled-variable-reference"},
- {20,"controlled-variable-units"},
- {21,"controlled-variable-value"},
- {22,"cov-increment"},
- {23,"datelist"},
- {24,"daylights-savings-status"},
- {25,"deadband"},
- {26,"derivative-constant"},
- {27,"derivative-constant-units"},
- {28,"description"},
- {29,"description-of-halt"},
- {30,"device-address-binding"},
- {31,"device-type"},
- {32,"effective-period"},
- {33,"elapsed-active-time"},
- {34,"error-limit"},
- {35,"event-enable"},
- {36,"event-state"},
- {37,"event-type"},
- {38,"exception-schedule"},
- {39,"fault-values"},
- {40,"feedback-value"},
- {41,"file-access-method"},
- {42,"file-size"},
- {43,"file-type"},
- {44,"firmware-revision"},
- {45,"high-limit"},
- {46,"inactive-text"},
- {47,"in-progress"},
- {48,"instance-of"},
- {49,"integral-constant"},
- {50,"integral-constant-units"},
- {51,"issue-confirmed-notifications"},
- {52,"limit-enable"},
- {53,"list-of-group-members"},
- {54,"list-of-object-property-references"},
- {55,"list-of-session-keys"},
- {56,"local-date"},
- {57,"local-time"},
- {58,"location"},
- {59,"low-limit"},
- {60,"manipulated-variable-reference"},
- {61,"maximum-output"},
- {62,"max-apdu-length-accepted"},
- {63,"max-info-frames"},
- {64,"max-master"},
- {65,"max-pres-value"},
- {66,"minimum-off-time"},
- {67,"minimum-on-time"},
- {68,"minimum-output"},
- {69,"min-pres-value"},
- {70,"model-name"},
- {71,"modification-date"},
- {72,"notify-type"},
- {73,"number-of-APDU-retries"},
- {74,"number-of-states"},
- {75,"object-identifier"},
- {76,"object-list"},
- {77,"object-name"},
- {78,"object-property-reference"},
- {79,"object-type"},
- {80,"optional"},
- {81,"out-of-service"},
- {82,"output-units"},
- {83,"event-parameters"},
- {84,"polarity"},
- {85,"present-value"},
- {86,"priority"},
- {87,"priority-array"},
- {88,"priority-for-writing"},
- {89,"process-identifier"},
- {90,"program-change"},
- {91,"program-location"},
- {92,"program-state"},
- {93,"proportional-constant"},
- {94,"proportional-constant-units"},
- {95,"protocol-conformance-class"},
- {96,"protocol-object-types-supported"},
- {97,"protocol-services-supported"},
- {98,"protocol-version"},
- {99,"read-only"},
- {100,"reason-for-halt"},
- {101,"recipient"},
- {102,"recipient-list"},
- {103,"reliability"},
- {104,"relinquish-default"},
- {105,"required"},
- {106,"resolution"},
- {107,"segmentation-supported"},
- {108,"setpoint"},
- {109,"setpoint-reference"},
- {110,"state-text"},
- {111,"status-flags"},
- {112,"system-status"},
- {113,"time-delay"},
- {114,"time-of-active-time-reset"},
- {115,"time-of-state-count-reset"},
- {116,"time-synchronization-recipients"},
- {117,"units"},
- {118,"update-interval"},
- {119,"utc-offset"},
- {120,"vendor-identifier"},
- {121,"vendor-name"},
- {122,"vt-class-supported"},
- {123,"weekly-schedule"},
- {124,"attempted-samples"},
- {125,"average-value"},
- {126,"buffer-size"},
- {127,"client-cov-increment"},
- {128,"cov-resubscription-interval"},
- {129,"current-notify-time"},
- {130,"event-time-stamp"},
- {131,"log-buffer"},
- {132,"log-device-object-property"},
- {133,"enable"}, /* per ANSI/ASHRAE 135-2004 addendum B */
- {134,"log-interval"},
- {135,"maximum-value"},
- {136,"minimum-value"},
- {137,"notification-threshold"},
- {138,"previous-notify-time"},
- {139,"protocol-revision"},
- {140,"records-since-notification"},
- {141,"record-count"},
- {142,"start-time"},
- {143,"stop-time"},
- {144,"stop-when-full"},
- {145,"total-record-count"},
- {146,"valid-samples"},
- {147,"window-interval"},
- {148,"window-samples"},
- {149,"maximum-value-time-stamp"},
- {150,"minimum-value-time-stamp"},
- {151,"variance-value"},
- {152,"active-cov-subscriptions"},
- {153,"backup-failure-timeout"},
- {154,"configuration-files"},
- {155,"database-revision"},
- {156,"direct-reading"},
- {157,"last-restore-time"},
- {158,"maintenance-required"},
- {159,"member-of"},
- {160,"mode"},
- {161,"operation-expected"},
- {162,"setting"},
- {163,"silenced"},
- {164,"tracking-value"},
- {165,"zone-members"},
- {166,"life-safety-alarm-values"},
- {167,"max-segments-accepted"},
- {168,"profile-name"},
- {169,"auto-slave-discovery"},
- {170,"manual-slave-address-binding"},
- {171,"slave-address-binding"},
- {172,"slave-proxy-enable"},
- {173,"last-notify-record"}, /* bug 4117 */
- {174,"schedule-default"},
- {175,"accepted-modes"},
- {176,"adjust-value"},
- {177,"count"},
- {178,"count-before-change"},
- {179,"count-change-time"},
- {180,"cov-period"},
- {181,"input-reference"},
- {182,"limit-monitoring-interval"},
- {183,"logging-device"},
- {184,"logging-record"},
- {185,"prescale"},
- {186,"pulse-rate"},
- {187,"scale"},
- {188,"scale-factor"},
- {189,"update-time"},
- {190,"value-before-change"},
- {191,"value-set"},
- {192,"value-change-time"},
- {193,"align-intervals"},
- {194,"group-member-names"},
- {195,"interval-offset"},
- {196,"last-restart-reason"},
- {197,"logging-type"},
- {198,"member-status-flags"},
- {199,"notification-period"},
- {200,"previous-notify-record"},
- {201,"requested-update-interval"},
- {202,"restart-notification-recipients"},
- {203,"time-of-device-restart"},
- {204,"time-synchronization-interval"},
- {205,"trigger"},
- {206,"UTC-time-synchronization-recipients"},
- {207,"node-subtype"},
- {208,"node-type"},
- {209,"structured-object-list"},
- {210,"subordinate-annotations"},
- {211,"subordinate-list"},
- {212,"actual-shed-level"},
- {213,"duty-window"},
- {214,"expected-shed-level"},
- {215,"full-duty-baseline"},
- {216,"node-subtype"},
- {217,"node-type"},
- {218,"requested-shed-level"},
- {219,"shed-duration"},
- {220,"shed-level-descriptions"},
- {221,"shed-levels"},
- {222,"state-description"},
- /* enumeration values 223-225 are unassigned */
- {226,"door-alarm-state"},
- {227,"door-extended-pulse-time"},
- {228,"door-members"},
- {229,"door-open-too-long-time"},
- {230,"door-pulse-time"},
- {231,"door-status"},
- {232,"door-unlock-delay-time"},
- {233,"lock-status"},
- {234,"masked-alarm-values"},
- {235,"secured-status"},
- /* enumeration values 236-243 are unassigned */
- {244,"absentee-limit"}, /* added with addenda 135-2008j */
- {245,"access-alarm-events"},
- {246,"access-doors"},
- {247,"access-event"},
- {248,"access-event-authentication-factor"},
- {249,"access-event-credential"},
- {250,"access-event-time"},
- {251,"access-transaction-events"},
- {252,"accompaniment"},
- {253,"accompaniment-time"},
- {254,"activation-time"},
- {255,"active-authentication-policy"},
- {256,"assigned-access-rights"},
- {257,"authentication-factors"},
- {258,"authentication-policy-list"},
- {259,"authentication-policy-names"},
- {260,"authentication-status"},
- {261,"authorization-mode"},
- {262,"belongs-to"},
- {263,"credential-disable"},
- {264,"credential-status"},
- {265,"credentials"},
- {266,"credentials-in-zone"},
- {267,"days-remaining"},
- {268,"entry-points"},
- {269,"exit-points"},
- {270,"expiry-time"},
- {271,"extended-time-enable"},
- {272,"failed-attempt-events"},
- {273,"failed-attempts"},
- {274,"failed-attempts-time"},
- {275,"last-access-event"},
- {276,"last-access-point"},
- {277,"last-credential-added"},
- {278,"last-credential-added-time"},
- {279,"last-credential-removed"},
- {280,"last-credential-removed-time"},
- {281,"last-use-time"},
- {282,"lockout"},
- {283,"lockout-relinquish-time"},
- {284,"master-exemption"},
- {285,"max-failed-attempts"},
- {286,"members"},
- {287,"muster-point"},
- {288,"negative-access-rules"},
- {289,"number-of-authentication-policies"},
- {290,"occupancy-count"},
- {291,"occupancy-count-adjust"},
- {292,"occupancy-count-enable"},
- {293,"occupancy-exemption"},
- {294,"occupancy-lower-limit"},
- {295,"occupancy-lower-limit-enforced"},
- {296,"occupancy-state"},
- {297,"occupancy-upper-limit"},
- {298,"occupancy-upper-limit-enforced"},
- {299,"passback-exemption"},
- {300,"passback-mode"},
- {301,"passback-timeout"},
- {302,"positive-access-rules"},
- {303,"reason-for-disable"},
- {304,"supported-formats"},
- {305,"supported-format-classes"},
- {306,"threat-authority"},
- {307,"threat-level"},
- {308,"trace-flag"},
- {309,"transaction-notification-class"},
- {310,"user-external-identifier"},
- {311,"user-information-reference"},
- /* enumeration values 312-316 are unassigned */
- {317,"user-name"},
- {318,"user-type"},
- {319,"uses-remaining"},
- {320,"zone-from"},
- {321,"zone-to"},
- {322,"access-event-tag"},
- {323,"global-identifier"},
- /* enumeration values 324-325 reserved for future addenda */
- {326,"verification-time"},
- {327,"base-device-security-policy"},
- {328,"distribution-key-revision"},
- {329,"do-not-hide"},
- {330,"key-sets"},
- {331,"last-key-server"},
- {332,"network-access-security-policies"},
- {333,"packet-reorder-time"},
- {334,"security-pdu-timeout"},
- {335,"security-time-window"},
- {336,"supported-security-algorithms"},
- {337,"update-key-set-timeout"},
- {338,"backup-and-restore-state"},
- {339,"backup-preparation-time"},
- {340,"restore-completion-time"},
- {341,"restore-preparation-time"},
- {342,"bit-mask"}, /* addenda 135-2008w */
- {343,"bit-text"},
- {344,"is-utc"},
- {345,"group-members"},
- {346,"group-member-names"},
- {347,"member-status-flags"},
- {348,"requested-update-interval"},
- {349,"covu-period"},
- {350,"covu-recipients"},
- {351,"event-message-texts"},
- {0, NULL}
+ { 0, "acked-transition"},
+ { 1, "ack-required"},
+ { 2, "action"},
+ { 3, "action-text"},
+ { 4, "active-text"},
+ { 5, "active-vt-session"},
+ { 6, "alarm-value"},
+ { 7, "alarm-values"},
+ { 8, "all"},
+ { 9, "all-write-successful"},
+ { 10, "apdu-segment-timeout"},
+ { 11, "apdu-timeout"},
+ { 12, "application-software-version"},
+ { 13, "archive"},
+ { 14, "bias"},
+ { 15, "change-of-state-count"},
+ { 16, "change-of-state-time"},
+ { 17, "notification-class"},
+ { 18, "the property in this place was deleted"},
+ { 19, "controlled-variable-reference"},
+ { 20, "controlled-variable-units"},
+ { 21, "controlled-variable-value"},
+ { 22, "cov-increment"},
+ { 23, "datelist"},
+ { 24, "daylights-savings-status"},
+ { 25, "deadband"},
+ { 26, "derivative-constant"},
+ { 27, "derivative-constant-units"},
+ { 28, "description"},
+ { 29, "description-of-halt"},
+ { 30, "device-address-binding"},
+ { 31, "device-type"},
+ { 32, "effective-period"},
+ { 33, "elapsed-active-time"},
+ { 34, "error-limit"},
+ { 35, "event-enable"},
+ { 36, "event-state"},
+ { 37, "event-type"},
+ { 38, "exception-schedule"},
+ { 39, "fault-values"},
+ { 40, "feedback-value"},
+ { 41, "file-access-method"},
+ { 42, "file-size"},
+ { 43, "file-type"},
+ { 44, "firmware-revision"},
+ { 45, "high-limit"},
+ { 46, "inactive-text"},
+ { 47, "in-progress"},
+ { 48, "instance-of"},
+ { 49, "integral-constant"},
+ { 50, "integral-constant-units"},
+ { 51, "issue-confirmed-notifications"},
+ { 52, "limit-enable"},
+ { 53, "list-of-group-members"},
+ { 54, "list-of-object-property-references"},
+ { 55, "list-of-session-keys"},
+ { 56, "local-date"},
+ { 57, "local-time"},
+ { 58, "location"},
+ { 59, "low-limit"},
+ { 60, "manipulated-variable-reference"},
+ { 61, "maximum-output"},
+ { 62, "max-apdu-length-accepted"},
+ { 63, "max-info-frames"},
+ { 64, "max-master"},
+ { 65, "max-pres-value"},
+ { 66, "minimum-off-time"},
+ { 67, "minimum-on-time"},
+ { 68, "minimum-output"},
+ { 69, "min-pres-value"},
+ { 70, "model-name"},
+ { 71, "modification-date"},
+ { 72, "notify-type"},
+ { 73, "number-of-APDU-retries"},
+ { 74, "number-of-states"},
+ { 75, "object-identifier"},
+ { 76, "object-list"},
+ { 77, "object-name"},
+ { 78, "object-property-reference"},
+ { 79, "object-type"},
+ { 80, "optional"},
+ { 81, "out-of-service"},
+ { 82, "output-units"},
+ { 83, "event-parameters"},
+ { 84, "polarity"},
+ { 85, "present-value"},
+ { 86, "priority"},
+ { 87, "priority-array"},
+ { 88, "priority-for-writing"},
+ { 89, "process-identifier"},
+ { 90, "program-change"},
+ { 91, "program-location"},
+ { 92, "program-state"},
+ { 93, "proportional-constant"},
+ { 94, "proportional-constant-units"},
+ { 95, "protocol-conformance-class"},
+ { 96, "protocol-object-types-supported"},
+ { 97, "protocol-services-supported"},
+ { 98, "protocol-version"},
+ { 99, "read-only"},
+ { 100, "reason-for-halt"},
+ { 101, "recipient"},
+ { 102, "recipient-list"},
+ { 103, "reliability"},
+ { 104, "relinquish-default"},
+ { 105, "required"},
+ { 106, "resolution"},
+ { 107, "segmentation-supported"},
+ { 108, "setpoint"},
+ { 109, "setpoint-reference"},
+ { 110, "state-text"},
+ { 111, "status-flags"},
+ { 112, "system-status"},
+ { 113, "time-delay"},
+ { 114, "time-of-active-time-reset"},
+ { 115, "time-of-state-count-reset"},
+ { 116, "time-synchronization-recipients"},
+ { 117, "units"},
+ { 118, "update-interval"},
+ { 119, "utc-offset"},
+ { 120, "vendor-identifier"},
+ { 121, "vendor-name"},
+ { 122, "vt-class-supported"},
+ { 123, "weekly-schedule"},
+ { 124, "attempted-samples"},
+ { 125, "average-value"},
+ { 126, "buffer-size"},
+ { 127, "client-cov-increment"},
+ { 128, "cov-resubscription-interval"},
+ { 129, "current-notify-time"},
+ { 130, "event-time-stamp"},
+ { 131, "log-buffer"},
+ { 132, "log-device-object-property"},
+ { 133, "enable"}, /* per ANSI/ASHRAE 135-2004 addendum B */
+ { 134, "log-interval"},
+ { 135, "maximum-value"},
+ { 136, "minimum-value"},
+ { 137, "notification-threshold"},
+ { 138, "previous-notify-time"},
+ { 139, "protocol-revision"},
+ { 140, "records-since-notification"},
+ { 141, "record-count"},
+ { 142, "start-time"},
+ { 143, "stop-time"},
+ { 144, "stop-when-full"},
+ { 145, "total-record-count"},
+ { 146, "valid-samples"},
+ { 147, "window-interval"},
+ { 148, "window-samples"},
+ { 149, "maximum-value-time-stamp"},
+ { 150, "minimum-value-time-stamp"},
+ { 151, "variance-value"},
+ { 152, "active-cov-subscriptions"},
+ { 153, "backup-failure-timeout"},
+ { 154, "configuration-files"},
+ { 155, "database-revision"},
+ { 156, "direct-reading"},
+ { 157, "last-restore-time"},
+ { 158, "maintenance-required"},
+ { 159, "member-of"},
+ { 160, "mode"},
+ { 161, "operation-expected"},
+ { 162, "setting"},
+ { 163, "silenced"},
+ { 164, "tracking-value"},
+ { 165, "zone-members"},
+ { 166, "life-safety-alarm-values"},
+ { 167, "max-segments-accepted"},
+ { 168, "profile-name"},
+ { 169, "auto-slave-discovery"},
+ { 170, "manual-slave-address-binding"},
+ { 171, "slave-address-binding"},
+ { 172, "slave-proxy-enable"},
+ { 173, "last-notify-record"}, /* bug 4117 */
+ { 174, "schedule-default"},
+ { 175, "accepted-modes"},
+ { 176, "adjust-value"},
+ { 177, "count"},
+ { 178, "count-before-change"},
+ { 179, "count-change-time"},
+ { 180, "cov-period"},
+ { 181, "input-reference"},
+ { 182, "limit-monitoring-interval"},
+ { 183, "logging-device"},
+ { 184, "logging-record"},
+ { 185, "prescale"},
+ { 186, "pulse-rate"},
+ { 187, "scale"},
+ { 188, "scale-factor"},
+ { 189, "update-time"},
+ { 190, "value-before-change"},
+ { 191, "value-set"},
+ { 192, "value-change-time"},
+ { 193, "align-intervals"},
+ { 194, "group-member-names"},
+ { 195, "interval-offset"},
+ { 196, "last-restart-reason"},
+ { 197, "logging-type"},
+ { 198, "member-status-flags"},
+ { 199, "notification-period"},
+ { 200, "previous-notify-record"},
+ { 201, "requested-update-interval"},
+ { 202, "restart-notification-recipients"},
+ { 203, "time-of-device-restart"},
+ { 204, "time-synchronization-interval"},
+ { 205, "trigger"},
+ { 206, "UTC-time-synchronization-recipients"},
+ { 207, "node-subtype"},
+ { 208, "node-type"},
+ { 209, "structured-object-list"},
+ { 210, "subordinate-annotations"},
+ { 211, "subordinate-list"},
+ { 212, "actual-shed-level"},
+ { 213, "duty-window"},
+ { 214, "expected-shed-level"},
+ { 215, "full-duty-baseline"},
+ { 216, "node-subtype"},
+ { 217, "node-type"},
+ { 218, "requested-shed-level"},
+ { 219, "shed-duration"},
+ { 220, "shed-level-descriptions"},
+ { 221, "shed-levels"},
+ { 222, "state-description"},
+ /* enumeration values 223-225 are unassigned */
+ { 226, "door-alarm-state"},
+ { 227, "door-extended-pulse-time"},
+ { 228, "door-members"},
+ { 229, "door-open-too-long-time"},
+ { 230, "door-pulse-time"},
+ { 231, "door-status"},
+ { 232, "door-unlock-delay-time"},
+ { 233, "lock-status"},
+ { 234, "masked-alarm-values"},
+ { 235, "secured-status"},
+ /* enumeration values 236-243 are unassigned */
+ { 244, "absentee-limit"}, /* added with addenda 135-2008j */
+ { 245, "access-alarm-events"},
+ { 246, "access-doors"},
+ { 247, "access-event"},
+ { 248, "access-event-authentication-factor"},
+ { 249, "access-event-credential"},
+ { 250, "access-event-time"},
+ { 251, "access-transaction-events"},
+ { 252, "accompaniment"},
+ { 253, "accompaniment-time"},
+ { 254, "activation-time"},
+ { 255, "active-authentication-policy"},
+ { 256, "assigned-access-rights"},
+ { 257, "authentication-factors"},
+ { 258, "authentication-policy-list"},
+ { 259, "authentication-policy-names"},
+ { 260, "authentication-status"},
+ { 261, "authorization-mode"},
+ { 262, "belongs-to"},
+ { 263, "credential-disable"},
+ { 264, "credential-status"},
+ { 265, "credentials"},
+ { 266, "credentials-in-zone"},
+ { 267, "days-remaining"},
+ { 268, "entry-points"},
+ { 269, "exit-points"},
+ { 270, "expiry-time"},
+ { 271, "extended-time-enable"},
+ { 272, "failed-attempt-events"},
+ { 273, "failed-attempts"},
+ { 274, "failed-attempts-time"},
+ { 275, "last-access-event"},
+ { 276, "last-access-point"},
+ { 277, "last-credential-added"},
+ { 278, "last-credential-added-time"},
+ { 279, "last-credential-removed"},
+ { 280, "last-credential-removed-time"},
+ { 281, "last-use-time"},
+ { 282, "lockout"},
+ { 283, "lockout-relinquish-time"},
+ { 284, "master-exemption"},
+ { 285, "max-failed-attempts"},
+ { 286, "members"},
+ { 287, "muster-point"},
+ { 288, "negative-access-rules"},
+ { 289, "number-of-authentication-policies"},
+ { 290, "occupancy-count"},
+ { 291, "occupancy-count-adjust"},
+ { 292, "occupancy-count-enable"},
+ { 293, "occupancy-exemption"},
+ { 294, "occupancy-lower-limit"},
+ { 295, "occupancy-lower-limit-enforced"},
+ { 296, "occupancy-state"},
+ { 297, "occupancy-upper-limit"},
+ { 298, "occupancy-upper-limit-enforced"},
+ { 299, "passback-exemption"},
+ { 300, "passback-mode"},
+ { 301, "passback-timeout"},
+ { 302, "positive-access-rules"},
+ { 303, "reason-for-disable"},
+ { 304, "supported-formats"},
+ { 305, "supported-format-classes"},
+ { 306, "threat-authority"},
+ { 307, "threat-level"},
+ { 308, "trace-flag"},
+ { 309, "transaction-notification-class"},
+ { 310, "user-external-identifier"},
+ { 311, "user-information-reference"},
+ /* enumeration values 312-316 are unassigned */
+ { 317, "user-name"},
+ { 318, "user-type"},
+ { 319, "uses-remaining"},
+ { 320, "zone-from"},
+ { 321, "zone-to"},
+ { 322, "access-event-tag"},
+ { 323, "global-identifier"},
+ /* enumeration values 324-325 reserved for future addenda */
+ { 326, "verification-time"},
+ { 327, "base-device-security-policy"},
+ { 328, "distribution-key-revision"},
+ { 329, "do-not-hide"},
+ { 330, "key-sets"},
+ { 331, "last-key-server"},
+ { 332, "network-access-security-policies"},
+ { 333, "packet-reorder-time"},
+ { 334, "security-pdu-timeout"},
+ { 335, "security-time-window"},
+ { 336, "supported-security-algorithms"},
+ { 337, "update-key-set-timeout"},
+ { 338, "backup-and-restore-state"},
+ { 339, "backup-preparation-time"},
+ { 340, "restore-completion-time"},
+ { 341, "restore-preparation-time"},
+ { 342, "bit-mask"}, /* addenda 135-2008w */
+ { 343, "bit-text"},
+ { 344, "is-utc"},
+ { 345, "group-members"},
+ { 346, "group-member-names"},
+ { 347, "member-status-flags"},
+ { 348, "requested-update-interval"},
+ { 349, "covu-period"},
+ { 350, "covu-recipients"},
+ { 351, "event-message-texts"},
+ { 0, NULL}
/* Enumerated values 0-511 are reserved for definition by ASHRAE.
Enumerated values 512-4194303 may be used by others subject to
the procedures and constraints described in Clause 23. */
@@ -3328,9 +3326,9 @@ BACnetPropertyIdentifier [] = {
static const value_string
BACnetBinaryPV [] = {
- {0,"inactive"},
- {1,"active"},
- {0,NULL}
+ { 0, "inactive"},
+ { 1, "active"},
+ { 0, NULL}
};
@@ -3342,177 +3340,177 @@ BACnetBinaryPV [] = {
#define ISO_18859_1 5
static const value_string
BACnetCharacterSet [] = {
- {ANSI_X34, "ANSI X3.4 / UTF-8 (since 2010)"},
- {IBM_MS_DBCS, "IBM/Microsoft DBCS"},
- {JIS_C_6226, "JIS C 6226"},
- {ISO_10646_UCS4, "ISO 10646(UCS-4)"},
- {ISO_10646_UCS2, "ISO 10646(UCS-2)"},
- {ISO_18859_1, "ISO 18859-1"},
- {0, NULL}
+ { ANSI_X34, "ANSI X3.4 / UTF-8 (since 2010)"},
+ { IBM_MS_DBCS, "IBM/Microsoft DBCS"},
+ { JIS_C_6226, "JIS C 6226"},
+ { ISO_10646_UCS4, "ISO 10646(UCS-4)"},
+ { ISO_10646_UCS2, "ISO 10646(UCS-2)"},
+ { ISO_18859_1, "ISO 18859-1"},
+ { 0, NULL}
};
static const value_string
BACnetStatusFlags [] = {
- {0,"in-alarm"},
- {1,"fault"},
- {2,"overridden"},
- {3,"out-of-service"},
- {0,NULL}
+ { 0, "in-alarm"},
+ { 1, "fault"},
+ { 2, "overridden"},
+ { 3, "out-of-service"},
+ { 0, NULL}
};
static const value_string
BACnetMessagePriority [] = {
- {0,"normal"},
- {1,"urgent"},
- {0,NULL}
+ { 0, "normal"},
+ { 1, "urgent"},
+ { 0, NULL}
};
static const value_string
BACnetAcknowledgementFilter [] = {
- {0,"all"},
- {1,"acked"},
- {2,"not-acked"},
- {0,NULL}
+ { 0, "all"},
+ { 1, "acked"},
+ { 2, "not-acked"},
+ { 0, NULL}
};
static const value_string
BACnetResultFlags [] = {
- {0,"firstitem"},
- {1,"lastitem"},
- {2,"moreitems"},
- {0,NULL}
+ { 0, "firstitem"},
+ { 1, "lastitem"},
+ { 2, "moreitems"},
+ { 0, NULL}
};
static const value_string
BACnetRelationSpecifier [] = {
- {0,"equal"},
- {1,"not-equal"},
- {2,"less-than"},
- {3,"greater-than"},
- {4,"less-than-or-equal"},
- {5,"greater-than-or-equal"},
- {0,NULL}
+ { 0, "equal"},
+ { 1, "not-equal"},
+ { 2, "less-than"},
+ { 3, "greater-than"},
+ { 4, "less-than-or-equal"},
+ { 5, "greater-than-or-equal"},
+ { 0, NULL}
};
static const value_string
BACnetSelectionLogic [] = {
- {0,"and"},
- {1,"or"},
- {2,"all"},
- {0,NULL}
+ { 0, "and"},
+ { 1, "or"},
+ { 2, "all"},
+ { 0, NULL}
};
static const value_string
BACnetEventStateFilter [] = {
- {0,"offnormal"},
- {1,"fault"},
- {2,"normal"},
- {3,"all"},
- {4,"active"},
- {0,NULL}
+ { 0, "offnormal"},
+ { 1, "fault"},
+ { 2, "normal"},
+ { 3, "all"},
+ { 4, "active"},
+ { 0, NULL}
};
static const value_string
BACnetEventTransitionBits [] = {
- {0,"to-offnormal"},
- {1,"to-fault"},
- {2,"to-normal"},
- {0,NULL}
+ { 0, "to-offnormal"},
+ { 1, "to-fault"},
+ { 2, "to-normal"},
+ { 0, NULL}
};
static const value_string
BACnetSegmentation [] = {
- {0,"segmented-both"},
- {1,"segmented-transmit"},
- {2,"segmented-receive"},
- {3,"no-segmentation"},
- {0,NULL}
+ { 0, "segmented-both"},
+ { 1, "segmented-transmit"},
+ { 2, "segmented-receive"},
+ { 3, "no-segmentation"},
+ { 0, NULL}
};
static const value_string
BACnetSilencedState [] = {
- {0,"unsilenced"},
- {1,"audible-silenced"},
- {2,"visible-silenced"},
- {3,"all-silenced"},
- {0,NULL}
+ { 0, "unsilenced"},
+ { 1, "audible-silenced"},
+ { 2, "visible-silenced"},
+ { 3, "all-silenced"},
+ { 0, NULL}
};
static const value_string
BACnetDeviceStatus [] = {
- {0,"operational"},
- {1,"operational-read-only"},
- {2,"download-required"},
- {3,"download-in-progress"},
- {4,"non-operational"},
- {5,"backup-in-progress"},
- {0,NULL}
+ { 0, "operational"},
+ { 1, "operational-read-only"},
+ { 2, "download-required"},
+ { 3, "download-in-progress"},
+ { 4, "non-operational"},
+ { 5, "backup-in-progress"},
+ { 0, NULL}
};
static const value_string
BACnetEnableDisable [] = {
- {0,"enable"},
- {1,"disable"},
- {2,"disable-initiation"},
- {0,NULL}
+ { 0, "enable"},
+ { 1, "disable"},
+ { 2, "disable-initiation"},
+ { 0, NULL}
};
static const value_string
months [] = {
- {1,"January" },
- {2,"February" },
- {3,"March" },
- {4,"April" },
- {5,"May" },
- {6,"June" },
- {7,"July" },
- {8,"August" },
- {9,"September" },
- {10,"October" },
- {11,"November" },
- {12,"December" },
- {255,"any month" },
- {0,NULL }
+ { 1, "January" },
+ { 2, "February" },
+ { 3, "March" },
+ { 4, "April" },
+ { 5, "May" },
+ { 6, "June" },
+ { 7, "July" },
+ { 8, "August" },
+ { 9, "September" },
+ { 10, "October" },
+ { 11, "November" },
+ { 12, "December" },
+ { 255, "any month" },
+ { 0, NULL }
};
static const value_string
weekofmonth [] = {
- {1,"days numbered 1-7" },
- {2,"days numbered 8-14" },
- {3,"days numbered 15-21" },
- {4,"days numbered 22-28" },
- {5,"days numbered 29-31" },
- {6,"last 7 days of this month" },
- {255,"any week of this month" },
- {0,NULL }
+ { 1, "days numbered 1-7" },
+ { 2, "days numbered 8-14" },
+ { 3, "days numbered 15-21" },
+ { 4, "days numbered 22-28" },
+ { 5, "days numbered 29-31" },
+ { 6, "last 7 days of this month" },
+ { 255, "any week of this month" },
+ { 0, NULL }
};
/* note: notification class object recipient-list uses
different day-of-week enum */
static const value_string
day_of_week [] = {
- {1,"Monday" },
- {2,"Tuesday" },
- {3,"Wednesday" },
- {4,"Thursday" },
- {5,"Friday" },
- {6,"Saturday" },
- {7,"Sunday" },
- {255,"any day of week" },
- {0,NULL }
+ { 1, "Monday" },
+ { 2, "Tuesday" },
+ { 3, "Wednesday" },
+ { 4, "Thursday" },
+ { 5, "Friday" },
+ { 6, "Saturday" },
+ { 7, "Sunday" },
+ { 255, "any day of week" },
+ { 0, NULL }
};
static const value_string
BACnetErrorClass [] = {
- {0,"device" },
- {1,"object" },
- {2,"property" },
- {3,"resources" },
- {4,"security" },
- {5,"services" },
- {6,"vt" },
- {7,"communication" },
- {0,NULL }
+ { 0, "device" },
+ { 1, "object" },
+ { 2, "property" },
+ { 3, "resources" },
+ { 4, "security" },
+ { 5, "services" },
+ { 6, "vt" },
+ { 7, "communication" },
+ { 0, NULL }
/* Enumerated values 0-63 are reserved for definition by ASHRAE.
Enumerated values64-65535 may be used by others subject to
the procedures and constraints described in Clause 23. */
@@ -3520,36 +3518,36 @@ BACnetErrorClass [] = {
static const value_string
BACnetVTClass [] = {
- {0,"default-terminal" },
- {1,"ansi-x3-64" },
- {2,"dec-vt52" },
- {3,"dec-vt100" },
- {4,"dec-vt200" },
- {5,"hp-700-94" },
- {6,"ibm-3130" },
- {0,NULL }
+ { 0, "default-terminal" },
+ { 1, "ansi-x3-64" },
+ { 2, "dec-vt52" },
+ { 3, "dec-vt100" },
+ { 4, "dec-vt200" },
+ { 5, "hp-700-94" },
+ { 6, "ibm-3130" },
+ { 0, NULL }
};
static const value_string
BACnetEventType [] = {
- {0,"change-of-bitstring" },
- {1,"change-of-state" },
- {2,"change-of-value" },
- {3,"command-failure" },
- {4,"floating-limit" },
- {5,"out-of-range" },
- {6,"complex-event-type" },
- {7,"buffer-ready" },
- {8,"change-of-life-safety" },
- {9,"extended" },
- {10,"buffer-ready" },
- {11,"unsigned-range" },
- {14,"double-out-of-range"}, /* added with addenda 135-2008w */
- {15,"signed-out-of-range"},
- {16,"unsigned-out-of-range"},
- {17,"change-of-characterstring"},
- {18,"change-of-status-flags"},
- {0,NULL }
+ { 0, "change-of-bitstring" },
+ { 1, "change-of-state" },
+ { 2, "change-of-value" },
+ { 3, "command-failure" },
+ { 4, "floating-limit" },
+ { 5, "out-of-range" },
+ { 6, "complex-event-type" },
+ { 7, "buffer-ready" },
+ { 8, "change-of-life-safety" },
+ { 9, "extended" },
+ { 10, "buffer-ready" },
+ { 11, "unsigned-range" },
+ { 14, "double-out-of-range"}, /* added with addenda 135-2008w */
+ { 15, "signed-out-of-range"},
+ { 16, "unsigned-out-of-range"},
+ { 17, "change-of-characterstring"},
+ { 18, "change-of-status-flags"},
+ { 0, NULL }
/* Enumerated values 0-63 are reserved for definition by ASHRAE.
Enumerated values 64-65535 may be used by others subject to
the procedures and constraints described in Clause 23.
@@ -3560,13 +3558,13 @@ BACnetEventType [] = {
static const value_string
BACnetEventState [] = {
- {0,"normal" },
- {1,"fault" },
- {2,"offnormal" },
- {3,"high-limit" },
- {4,"low-limit" },
- {5,"life-safety-alarm" },
- {0,NULL }
+ { 0, "normal" },
+ { 1, "fault" },
+ { 2, "offnormal" },
+ { 3, "high-limit" },
+ { 4, "low-limit" },
+ { 5, "life-safety-alarm" },
+ { 0, NULL }
/* Enumerated values 0-63 are reserved for definition by ASHRAE.
Enumerated values 64-65535 may be used by others subject to
the procedures and constraints described in Clause 23. */
@@ -3574,115 +3572,115 @@ BACnetEventState [] = {
static const value_string
BACnetLogStatus [] = {
- {0,"log-disabled" },
- {1,"buffer-purged" },
- {2,"log-interrupted"},
- {0,NULL }
+ { 0, "log-disabled" },
+ { 1, "buffer-purged" },
+ { 2, "log-interrupted"},
+ { 0, NULL }
};
static const value_string
BACnetMaintenance [] = {
- {0,"none" },
- {1,"periodic-test" },
- {2,"need-service-operational" },
- {3,"need-service-inoperative" },
- {0,NULL }
+ { 0, "none" },
+ { 1, "periodic-test" },
+ { 2, "need-service-operational" },
+ { 3, "need-service-inoperative" },
+ { 0, NULL }
};
static const value_string
BACnetNotifyType [] = {
- {0,"alarm" },
- {1,"event" },
- {2,"ack-notification" },
- {0,NULL }
+ { 0, "alarm" },
+ { 1, "event" },
+ { 2, "ack-notification" },
+ { 0, NULL }
};
static const value_string
BACnetServicesSupported [] = {
- {0,"acknowledgeAlarm"},
- {1,"confirmedCOVNotification"},
- {2,"confirmedEventNotification"},
- {3,"getAlarmSummary"},
- {4,"getEnrollmentSummary"},
- {5,"subscribeCOV"},
- {6,"atomicReadFile"},
- {7,"atomicWriteFile"},
- {8,"addListElement"},
- {9,"removeListElement"},
- {10,"createObject"},
- {11,"deleteObject"},
- {12,"readProperty"},
- {13,"readPropertyConditional"},
- {14,"readPropertyMultiple"},
- {15,"writeProperty"},
- {16,"writePropertyMultiple"},
- {17,"deviceCommunicationControl"},
- {18,"confirmedPrivateTransfer"},
- {19,"confirmedTextMessage"},
- {20,"reinitializeDevice"},
- {21,"vtOpen"},
- {22,"vtClose"},
- {23,"vtData"},
- {24,"authenticate"},
- {25,"requestKey"},
- {26,"i-Am"},
- {27,"i-Have"},
- {28,"unconfirmedCOVNotification"},
- {29,"unconfirmedEventNotification"},
- {30,"unconfirmedPrivateTransfer"},
- {31,"unconfirmedTextMessage"},
- {32,"timeSynchronization"},
- {33,"who-Has"},
- {34,"who-Is"},
- {35,"readRange"},
- {36,"utcTimeSynchronization"},
- {37,"lifeSafetyOperation"},
- {38,"subscribeCOVProperty"},
- {39,"getEventInformation"},
- {0, NULL}
+ { 0, "acknowledgeAlarm"},
+ { 1, "confirmedCOVNotification"},
+ { 2, "confirmedEventNotification"},
+ { 3, "getAlarmSummary"},
+ { 4, "getEnrollmentSummary"},
+ { 5, "subscribeCOV"},
+ { 6, "atomicReadFile"},
+ { 7, "atomicWriteFile"},
+ { 8, "addListElement"},
+ { 9, "removeListElement"},
+ { 10, "createObject"},
+ { 11, "deleteObject"},
+ { 12, "readProperty"},
+ { 13, "readPropertyConditional"},
+ { 14, "readPropertyMultiple"},
+ { 15, "writeProperty"},
+ { 16, "writePropertyMultiple"},
+ { 17, "deviceCommunicationControl"},
+ { 18, "confirmedPrivateTransfer"},
+ { 19, "confirmedTextMessage"},
+ { 20, "reinitializeDevice"},
+ { 21, "vtOpen"},
+ { 22, "vtClose"},
+ { 23, "vtData"},
+ { 24, "authenticate"},
+ { 25, "requestKey"},
+ { 26, "i-Am"},
+ { 27, "i-Have"},
+ { 28, "unconfirmedCOVNotification"},
+ { 29, "unconfirmedEventNotification"},
+ { 30, "unconfirmedPrivateTransfer"},
+ { 31, "unconfirmedTextMessage"},
+ { 32, "timeSynchronization"},
+ { 33, "who-Has"},
+ { 34, "who-Is"},
+ { 35, "readRange"},
+ { 36, "utcTimeSynchronization"},
+ { 37, "lifeSafetyOperation"},
+ { 38, "subscribeCOVProperty"},
+ { 39, "getEventInformation"},
+ { 0, NULL}
};
static const value_string
BACnetPropertyStates [] = {
- {0,"boolean-value"},
- {1,"binary-value"},
- {2,"event-type"},
- {3,"polarity"},
- {4,"program-change"},
- {5,"program-state"},
- {6,"reason-for-halt"},
- {7,"reliability"},
- {8,"state"},
- {9,"system-status"},
- {10,"units"},
- {11,"unsigned-value"},
- {12,"life-safety-mode"},
- {13,"life-safety-state"},
- {14,"restart-reason"},
- {15,"door-alarm-state"},
- {16,"action"},
- {17,"door-secured-status"},
- {18,"door-status"},
- {19,"door-value"},
- {20,"file-access-method"},
- {21,"lock-status"},
- {22,"life-safety-operation"},
- {23,"maintenance"},
- {24,"node-type"},
- {25,"notify-type"},
- {26,"security-level"},
- {27,"shed-state"},
- {28,"silenced-state"},
- /* context tag 29 reserved for future addenda */
- {29,"unknown-29"},
- {30,"access-event"},
- {31,"zone-occupancy-state"},
- {32,"access-credential-disable-reason"},
- {33,"access-credential-disable"},
- {34,"authentication-status"},
- {35,"unknown-35"},
- {36,"backup-state"},
- {0,NULL}
+ { 0, "boolean-value"},
+ { 1, "binary-value"},
+ { 2, "event-type"},
+ { 3, "polarity"},
+ { 4, "program-change"},
+ { 5, "program-state"},
+ { 6, "reason-for-halt"},
+ { 7, "reliability"},
+ { 8, "state"},
+ { 9, "system-status"},
+ { 10, "units"},
+ { 11, "unsigned-value"},
+ { 12, "life-safety-mode"},
+ { 13, "life-safety-state"},
+ { 14, "restart-reason"},
+ { 15, "door-alarm-state"},
+ { 16, "action"},
+ { 17, "door-secured-status"},
+ { 18, "door-status"},
+ { 19, "door-value"},
+ { 20, "file-access-method"},
+ { 21, "lock-status"},
+ { 22, "life-safety-operation"},
+ { 23, "maintenance"},
+ { 24, "node-type"},
+ { 25, "notify-type"},
+ { 26, "security-level"},
+ { 27, "shed-state"},
+ { 28, "silenced-state"},
+ /* context tag 29 reserved for future addenda */
+ { 29, "unknown-29"},
+ { 30, "access-event"},
+ { 31, "zone-occupancy-state"},
+ { 32, "access-credential-disable-reason"},
+ { 33, "access-credential-disable"},
+ { 34, "authentication-status"},
+ { 35, "unknown-35"},
+ { 36, "backup-state"},
+ { 0, NULL}
/* Tag values 0-63 are reserved for definition by ASHRAE.
Tag values of 64-254 may be used by others to accommodate
vendor specific properties that have discrete or enumerated values,
@@ -3691,12 +3689,12 @@ BACnetPropertyStates [] = {
static const value_string
BACnetProgramError [] = {
- {0,"normal"},
- {1,"load-failed"},
- {2,"internal"},
- {3,"program"},
- {4,"other"},
- {0,NULL}
+ { 0, "normal"},
+ { 1, "load-failed"},
+ { 2, "internal"},
+ { 3, "program"},
+ { 4, "other"},
+ { 0, NULL}
/* Enumerated values 0-63 are reserved for definition by ASHRAE.
Enumerated values 64-65535 may be used by others subject to
the procedures and constraints described in Clause 23. */
@@ -3704,682 +3702,682 @@ BACnetProgramError [] = {
static const value_string
BACnetProgramRequest [] = {
- {0,"ready"},
- {1,"load"},
- {2,"run"},
- {3,"halt"},
- {4,"restart"},
- {4,"unload"},
- {0,NULL}
+ { 0, "ready"},
+ { 1, "load"},
+ { 2, "run"},
+ { 3, "halt"},
+ { 4, "restart"},
+ { 4, "unload"},
+ { 0, NULL}
};
static const value_string
BACnetProgramState [] = {
- {0,"idle"},
- {1,"loading"},
- {2,"running"},
- {3,"waiting"},
- {4,"halted"},
- {4,"unloading"},
- {0,NULL}
+ { 0, "idle"},
+ { 1, "loading"},
+ { 2, "running"},
+ { 3, "waiting"},
+ { 4, "halted"},
+ { 4, "unloading"},
+ { 0, NULL}
};
static const value_string
BACnetReinitializedStateOfDevice [] = {
- {0,"coldstart"},
- {1,"warmstart"},
- {2,"startbackup"},
- {3,"endbackup"},
- {4,"startrestore"},
- {5,"endrestore"},
- {6,"abortrestore"},
- {0,NULL}
+ { 0, "coldstart"},
+ { 1, "warmstart"},
+ { 2, "startbackup"},
+ { 3, "endbackup"},
+ { 4, "startrestore"},
+ { 5, "endrestore"},
+ { 6, "abortrestore"},
+ { 0, NULL}
};
static const value_string
BACnetPolarity [] = {
- {0,"normal"},
- {1,"reverse"},
- {0,NULL}
+ { 0, "normal"},
+ { 1, "reverse"},
+ { 0, NULL}
};
static const value_string
BACnetTagNames[] = {
- { 5, "Extended Value" },
- { 6, "Opening Tag" },
- { 7, "Closing Tag" },
- { 0, NULL }
+ { 5, "Extended Value" },
+ { 6, "Opening Tag" },
+ { 7, "Closing Tag" },
+ { 0, NULL }
};
static const value_string
BACnetReadRangeOptions[] = {
- { 3, "range byPosition" },
- { 4, "range byTime" },
- { 5, "range timeRange" },
- { 6, "range bySequenceNumber" },
- { 7, "range byTime" },
- { 0, NULL }
+ { 3, "range byPosition" },
+ { 4, "range byTime" },
+ { 5, "range timeRange" },
+ { 6, "range bySequenceNumber" },
+ { 7, "range byTime" },
+ { 0, NULL }
};
/* Present_Value for Load Control Object */
static const value_string
BACnetShedState[] = {
- { 0, "shed-inactive" },
- { 1, "shed-request-pending" },
- { 2, "shed-compliant" },
- { 3, "shed-non-compliant" },
- { 0, NULL }
+ { 0, "shed-inactive" },
+ { 1, "shed-request-pending" },
+ { 2, "shed-compliant" },
+ { 3, "shed-non-compliant" },
+ { 0, NULL }
};
static const value_string
BACnetNodeType [] = {
- { 0, "unknown" },
- { 1, "system" },
- { 2, "network" },
- { 3, "device" },
- { 4, "organizational" },
- { 5, "area" },
- { 6, "equipment" },
- { 7, "point" },
- { 8, "collection" },
- { 9, "property" },
- { 10, "functional" },
- { 11, "other" },
- { 0, NULL }
+ { 0, "unknown" },
+ { 1, "system" },
+ { 2, "network" },
+ { 3, "device" },
+ { 4, "organizational" },
+ { 5, "area" },
+ { 6, "equipment" },
+ { 7, "point" },
+ { 8, "collection" },
+ { 9, "property" },
+ { 10, "functional" },
+ { 11, "other" },
+ { 0, NULL }
};
static const value_string
BACnetLoggingType [] = {
- { 0, "polled" },
- { 1, "cov" },
- { 2, "triggered" },
- { 0, NULL }
+ { 0, "polled" },
+ { 1, "cov" },
+ { 2, "triggered" },
+ { 0, NULL }
};
static const value_string
BACnetDoorStatus [] = {
- { 0, "closed" },
- { 1, "opened" },
- { 2, "unknown" },
- { 0, NULL }
+ { 0, "closed" },
+ { 1, "opened" },
+ { 2, "unknown" },
+ { 0, NULL }
};
static const value_string
BACnetLockStatus [] = {
- { 0, "locked" },
- { 1, "unlocked" },
- { 2, "fault" },
- { 3, "unknown" },
- { 0, NULL }
+ { 0, "locked" },
+ { 1, "unlocked" },
+ { 2, "fault" },
+ { 3, "unknown" },
+ { 0, NULL }
};
static const value_string
BACnetDoorSecuredStatus [] = {
- { 0, "secured" },
- { 1, "unsecured" },
- { 2, "unknown" },
- { 0, NULL }
+ { 0, "secured" },
+ { 1, "unsecured" },
+ { 2, "unknown" },
+ { 0, NULL }
};
static const value_string
BACnetDoorAlarmState [] = {
- { 0, "normal" },
- { 1, "alarm" },
- { 2, "door-open-too-long" },
- { 3, "forced-open" },
- { 4, "tamper" },
- { 5, "door-fault" },
- { 6, "lock-down" },
- { 7, "free-access" },
- { 8, "egress-open" },
- { 0, NULL }
+ { 0, "normal" },
+ { 1, "alarm" },
+ { 2, "door-open-too-long" },
+ { 3, "forced-open" },
+ { 4, "tamper" },
+ { 5, "door-fault" },
+ { 6, "lock-down" },
+ { 7, "free-access" },
+ { 8, "egress-open" },
+ { 0, NULL }
};
static const value_string
BACnetAccumulatorStatus [] = {
- { 0, "normal" },
- { 1, "starting" },
- { 2, "recovered" },
- { 3, "abnormal" },
- { 4, "failed" },
- { 0, NULL }
+ { 0, "normal" },
+ { 1, "starting" },
+ { 2, "recovered" },
+ { 3, "abnormal" },
+ { 4, "failed" },
+ { 0, NULL }
};
static const value_string
BACnetVendorIdentifiers [] = {
- { 0, "ASHRAE" },
- { 1, "NIST" },
- { 2, "The Trane Company" },
- { 3, "McQuay International" },
- { 4, "PolarSoft" },
- { 5, "Johnson Controls, Inc." },
- { 6, "American Auto-Matrix" },
- { 7, "Siemens Building Technologies, Ltd., Landis & Staefa Division Europe" },
- { 8, "Delta Controls" },
- { 9, "Siemens Building Technologies, Inc." },
- { 10, "Tour Andover Controls Corporation" },
- { 11, "TAC" },
- { 12, "Orion Analysis Corporation" },
- { 13, "Teletrol Systems Inc." },
- { 14, "Cimetrics Technology" },
- { 15, "Cornell University" },
- { 16, "United Technologies Carrier" },
- { 17, "Honeywell Inc." },
- { 18, "Alerton / Honeywell" },
- { 19, "TAC AB" },
- { 20, "Hewlett-Packard Company" },
- { 21, "Dorsette's Inc." },
- { 22, "Cerberus AG" },
- { 23, "York Controls Group" },
- { 24, "Automated Logic Corporation" },
- { 25, "CSI Control Systems International" },
- { 26, "Phoenix Controls Corporation" },
- { 27, "Innovex Technologies, Inc." },
- { 28, "KMC Controls, Inc." },
- { 29, "Xn Technologies, Inc." },
- { 30, "Hyundai Information Technology Co., Ltd." },
- { 31, "Tokimec Inc." },
- { 32, "Simplex" },
- { 33, "North Communications Limited" },
- { 34, "Notifier" },
- { 35, "Reliable Controls Corporation" },
- { 36, "Tridium Inc." },
- { 37, "Sierra Monitor Corp." },
- { 38, "Silicon Energy" },
- { 39, "Kieback & Peter GmbH & Co KG" },
- { 40, "Anacon Systems, Inc." },
- { 41, "Systems Controls & Instruments, LLC" },
- { 42, "Lithonia Lighting" },
- { 43, "Micropower Manufacturing" },
- { 44, "Matrix Controls" },
- { 45, "METALAIRE" },
- { 46, "ESS Engineering" },
- { 47, "Sphere Systems Pty Ltd." },
- { 48, "Walker Technologies Corporation" },
- { 49, "H I Solutions, Inc." },
- { 50, "MBS GmbH" },
- { 51, "SAMSON AG" },
- { 52, "Badger Meter Inc." },
- { 53, "DAIKIN Industries Ltd." },
- { 54, "NARA Controls Inc." },
- { 55, "Mammoth Inc." },
- { 56, "Liebert Corporation" },
- { 57, "SEMCO Incorporated" },
- { 58, "Air Monitor Corporation" },
- { 59, "TRIATEK, Inc." },
- { 60, "NexLight" },
- { 61, "Multistack" },
- { 62, "TSI Incorporated" },
- { 63, "Weather-Rite, Inc." },
- { 64, "Dunham-Bush" },
- { 65, "Reliance Electric" },
- { 66, "LCS Inc." },
- { 67, "Regulator Australia PTY Ltd." },
- { 68, "Touch-Plate Lighting Controls" },
- { 69, "Amann GmbH" },
- { 70, "RLE Technologies" },
- { 71, "Cardkey Systems" },
- { 72, "SECOM Co., Ltd." },
- { 73, "ABB Gebaudetechnik AG Bereich NetServ" },
- { 74, "KNX Association cvba" },
- { 75, "Institute of Electrical Installation Engineers of Japan (IEIEJ)" },
- { 76, "Nohmi Bosai, Ltd." },
- { 77, "Carel S.p.A." },
- { 78, "AirSense Technology, Inc." },
- { 79, "Hochiki Corporation" },
- { 80, "Fr. Sauter AG" },
- { 81, "Matsushita Electric Works, Ltd." },
- { 82, "Mitsubishi Electric Corporation, Inazawa Works" },
- { 83, "Mitsubishi Heavy Industries, Ltd." },
- { 84, "ITT Bell & Gossett" },
- { 85, "Yamatake Building Systems Co., Ltd." },
- { 86, "The Watt Stopper, Inc." },
- { 87, "Aichi Tokei Denki Co., Ltd." },
- { 88, "Activation Technologies, LLC" },
- { 89, "Saia-Burgess Controls, Ltd." },
- { 90, "Hitachi, Ltd." },
- { 91, "Novar Corp./Trend Control Systems Ltd." },
- { 92, "Mitsubishi Electric Lighting Corporation" },
- { 93, "Argus Control Systems, Ltd." },
- { 94, "Kyuki Corporation" },
- { 95, "Richards-Zeta Building Intelligence, Inc." },
- { 96, "Scientech R&D, Inc." },
- { 97, "VCI Controls, Inc." },
- { 98, "Toshiba Corporation" },
- { 99, "Mitsubishi Electric Corporation Air Conditioning & Refrigeration Systems Works" },
- { 100, "Custom Mechanical Equipment, LLC" },
- { 101, "ClimateMaster" },
- { 102, "ICP Panel-Tec, Inc." },
- { 103, "D-Tek Controls" },
- { 104, "NEC Engineering, Ltd." },
- { 105, "PRIVA BV" },
- { 106, "Meidensha Corporation" },
- { 107, "JCI Systems Integration Services" },
- { 108, "Freedom Corporation" },
- { 109, "Neuberger Gebaudeautomation GmbH" },
- { 110, "Sitronix" },
- { 111, "Leviton Manufacturing" },
- { 112, "Fujitsu Limited" },
- { 113, "Emerson Network Power" },
- { 114, "S. A. Armstrong, Ltd." },
- { 115, "Visonet AG" },
- { 116, "M&M Systems, Inc." },
- { 117, "Custom Software Engineering" },
- { 118, "Nittan Company, Limited" },
- { 119, "Elutions Inc. (Wizcon Systems SAS)" },
- { 120, "Pacom Systems Pty., Ltd." },
- { 121, "Unico, Inc." },
- { 122, "Ebtron, Inc." },
- { 123, "Scada Engine" },
- { 124, "AC Technology Corporation" },
- { 125, "Eagle Technology" },
- { 126, "Data Aire, Inc." },
- { 127, "ABB, Inc." },
- { 128, "Transbit Sp. z o. o." },
- { 129, "Toshiba Carrier Corporation" },
- { 130, "Shenzhen Junzhi Hi-Tech Co., Ltd." },
- { 131, "Tokai Soft" },
- { 132, "Lumisys" },
- { 133, "Veris Industries" },
- { 134, "Centaurus Prime" },
- { 135, "Sand Network Systems" },
- { 136, "Regulvar, Inc." },
- { 137, "Fastek International, Ltd." },
- { 138, "PowerCold Comfort Air Solutions, Inc." },
- { 139, "I Controls" },
- { 140, "Viconics Electronics, Inc." },
- { 141, "Yaskawa Electric America, Inc." },
- { 142, "Plueth Regelsysteme" },
- { 143, "Digitale Mess- und Steuersysteme AG" },
- { 144, "Fujitsu General Limited" },
- { 145, "Project Engineering S.r.l." },
- { 146, "Sanyo Electric Co., Ltd." },
- { 147, "Integrated Information Systems, Inc." },
- { 148, "Temco Controls, Ltd." },
- { 149, "Airtek Technologies, Inc." },
- { 150, "Advantech Corporation" },
- { 151, "Titan Products, Ltd." },
- { 152, "Regel Partners" },
- { 153, "National Environmental Product" },
- { 154, "Unitec Corporation" },
- { 155, "Kanden Engineering Company" },
- { 156, "Messner Gebaudetechnik GmbH" },
- { 157, "Integrated.CH" },
- { 158, "EH Price Limited" },
- { 159, "SE-Elektronic GmbH" },
- { 160, "Rockwell Automation" },
- { 161, "Enflex Corp." },
- { 162, "ASI Controls" },
- { 163, "SysMik GmbH Dresden" },
- { 164, "HSC Regelungstechnik GmbH" },
- { 165, "Smart Temp Australia Pty. Ltd." },
- { 166, "PCI Lighting Control Systems" },
- { 167, "Duksan Mecasys Co., Ltd." },
- { 168, "Fuji IT Co., Ltd." },
- { 169, "Vacon Plc" },
- { 170, "Leader Controls" },
- { 171, "Cylon Controls, Ltd." },
- { 172, "Compas" },
- { 173, "Mitsubishi Electric Building Techno-Service Co., Ltd." },
- { 174, "Building Control Integrators" },
- { 175, "ITG Worldwide (M) Sdn Bhd" },
- { 176, "Lutron Electronics Co., Inc." },
- { 177, "Cooper-Atkins Corporation" },
- { 178, "LOYTEC Electronics GmbH" },
- { 179, "ProLon" },
- { 180, "Mega Controls Limited" },
- { 181, "Micro Control Systems, Inc." },
- { 182, "Kiyon, Inc." },
- { 183, "Dust Networks" },
- { 184, "Advanced Building Automation Systems" },
- { 185, "Hermos AG" },
- { 186, "CEZIM" },
- { 187, "Softing" },
- { 188, "Lynxspring" },
- { 189, "Schneider Toshiba Inverter Europe" },
- { 190, "Danfoss Drives A/S" },
- { 191, "Eaton Corporation" },
- { 192, "Matyca S.A." },
- { 193, "Botech AB" },
- { 194, "Noveo, Inc." },
- { 195, "AMEV" },
- { 196, "Yokogawa Electric Corporation" },
- { 197, "GFR Gesellschaft fur Regelungstechnik" },
- { 198, "Exact Logic" },
- { 199, "Mass Electronics Pty Ltd dba Innotech Control Systems Australia" },
- { 200, "Kandenko Co., Ltd." },
- { 201, "DTF, Daten-Technik Fries" },
- { 202, "Klimasoft, Ltd." },
- { 203, "Toshiba Schneider Inverter Corporation" },
- { 204, "Control Applications, Ltd." },
- { 205, "KDT Systems Co., Ltd." },
- { 206, "Onicon Incorporated" },
- { 207, "Automation Displays, Inc." },
- { 208, "Control Solutions, Inc." },
- { 209, "Remsdaq Limited" },
- { 210, "NTT Facilities, Inc." },
- { 211, "VIPA GmbH" },
- { 212, "TSC21 Association of Japan" },
- { 213, "BBP Energie Ltee" },
- { 214, "HRW Limited" },
- { 215, "Lighting Control & Design, Inc." },
- { 216, "Mercy Electronic and Electrical Industries" },
- { 217, "Samsung SDS Co., Ltd" },
- { 218, "Impact Facility Solutions, Inc." },
- { 219, "Aircuity" },
- { 220, "Control Techniques, Ltd." },
- { 221, "Evolve Control Systems, LLC" },
- { 222, "WAGO Kontakttechnik GmbH & Co. KG" },
- { 223, "Cerus Industrial" },
- { 224, "Chloride Power Protection Company" },
- { 225, "Computrols, Inc." },
- { 226, "Phoenix Contact GmbH & Co. KG" },
- { 227, "Grundfos Management A/S" },
- { 228, "Ridder Drive Systems" },
- { 229, "Soft Device SDN BHD" },
- { 230, "Integrated Control Technology Limited" },
- { 231, "AIRxpert Systems, Inc." },
- { 232, "Microtrol Limited" },
- { 233, "Red Lion Controls" },
- { 234, "Digital Electronics Corporation" },
- { 235, "Ennovatis GmbH" },
- { 236, "Serotonin Software Technologies, Inc." },
- { 237, "LS Industrial Systems Co., Ltd." },
- { 238, "Square D Company" },
- { 239, "S Squared Innovations, Inc." },
- { 240, "Aricent Ltd." },
- { 241, "EtherMetrics, LLC" },
- { 242, "Industrial Control Communications, Inc." },
- { 243, "Paragon Controls, Inc." },
- { 244, "A. O. Smith Corporation" },
- { 245, "Contemporary Control Systems, Inc." },
- { 246, "Intesis Software SL" },
- { 247, "Ingenieurgesellschaft N. Hartleb mbH" },
- { 248, "Heat-Timer Corporation" },
- { 249, "Ingrasys Technology, Inc." },
- { 250, "Costerm Building Automation" },
- { 251, "Wilo AG" },
- { 252, "Embedia Technologies Corp." },
- { 253, "Technilog" },
- { 254, "HR Controls Ltd. & Co. KG" },
- { 255, "Lennox International, Inc." },
- { 256, "RK-Tec Rauchklappen-Steuerungssysteme GmbH & Co. KG" },
- { 257, "Thermomax, Ltd." },
- { 258, "ELCON Electronic Control, Ltd." },
- { 259, "Larmia Control AB" },
- { 260, "BACnet Stack at SourceForge" },
- { 261, "G4S Security Services A/S" },
- { 262, "Sitek S.p.A." },
- { 263, "Cristal Controles" },
- { 264, "Regin AB" },
- { 265, "Dimension Software, Inc. " },
- { 266, "SynapSense Corporation" },
- { 267, "Beijing Nantree Electronic Co., Ltd." },
- { 268, "Camus Hydronics Ltd." },
- { 269, "Kawasaki Heavy Industries, Ltd. " },
- { 270, "Critical Environment Technologies" },
- { 271, "ILSHIN IBS Co., Ltd." },
- { 272, "ELESTA Energy Control AG" },
- { 273, "KROPMAN Installatietechniek" },
- { 274, "Baldor Electric Company" },
- { 275, "INGA mbH" },
- { 276, "GE Consumer & Industrial" },
- { 277, "Functional Devices, Inc." },
- { 278, "ESAC" },
- { 279, "M-System Co., Ltd." },
- { 280, "Yokota Co., Ltd." },
- { 281, "Hitranse Technology Co., LTD" },
- { 282, "Federspiel Controls" },
- { 283, "Kele, Inc." },
- { 284, "Opera Electronics, Inc." },
- { 285, "Gentec" },
- { 286, "Embedded Science Labs, LLC" },
- { 287, "Parker Hannifin Corporation" },
- { 288, "MaCaPS International Limited" },
- { 289, "Link4 Corporation" },
- { 290, "Romutec Steuer-u. Regelsysteme GmbH" },
- { 291, "Pribusin, Inc." },
- { 292, "Advantage Controls" },
- { 293, "Critical Room Control" },
- { 294, "LEGRAND" },
- { 295, "Tongdy Control Technology Co., Ltd." },
- { 296, "ISSARO Integrierte Systemtechnik" },
- { 297, "Pro-Dev Industries" },
- { 298, "DRI-STEEM" },
- { 299, "Creative Electronic GmbH" },
- { 300, "Swegon AB" },
- { 301, "Jan Brachacek" },
- { 302, "Hitachi Appliances, Inc." },
- { 303, "Real Time Automation, Inc." },
- { 304, "ITEC Hankyu-Hanshin Co." },
- { 305, "Cyrus E&M Engineering Co., Ltd." },
- { 306, "Racine Federated, Inc." },
- { 307, "Verari Systems, Inc." },
- { 308, "Elesta GmbH Building Automation" },
- { 309, "Securiton" },
- { 310, "OSlsoft, Inc." },
- { 311, "Hanazeder Electronic GmbH" },
- { 312, "Honeywell Security Deutschland, Novar GmbH" },
- { 313, "Siemens Energy & Automation, Inc." },
- { 314, "ETM Professional Control GmbH" },
- { 315, "Meitav-tec, Ltd." },
- { 316, "Janitza Electronics GmbH" },
- { 317, "MKS Nordhausen" },
- { 318, "De Gier Drive Systems B.V." },
- { 319, "Cypress Envirosystems" },
- { 320, "SMARTron s.r.o." },
- { 321, "Verari Systems, Inc." },
- { 322, "K-W Electronic Service, Inc." },
- { 323, "ALFA-SMART Energy Management" },
- { 324, "Telkonet, Inc." },
- { 325, "Securiton GmbH" },
- { 326, "Cemtrex, Inc." },
- { 327, "Performance Technologies, Inc." },
- { 328, "Xtralis (Aust) Pty Ltd" },
- { 329, "TROX GmbH" },
- { 330, "Beijing Hysine Technology Co., Ltd" },
- { 331, "RCK Controls, Inc." },
- { 332, "ACELIA" },
- { 333, "Novar/Honeywell" },
- { 334, "The S4 Group, Inc." },
- { 335, "Schneider Electric" },
- { 336, "LHA Systems" },
- { 337, "GHM engineering Group, Inc." },
- { 338, "Cllimalux S.A." },
- { 339, "VAISALA Oyj" },
- { 340, "COMPLEX (Beijing) Technology, Co., LTD." },
- { 342, "POWERPEG NSI Limited" },
- { 343, "BACnet Interoperability Testing Services, Inc." },
- { 344, "Teco a.s." },
- { 345, "Plexus Technology Limited"},
- { 346, "Energy Focus, Inc."},
- { 347, "Powersmiths International Corp."},
- { 348, "Nichibei Co., Ltd."},
- { 349, "HKC Technology Ltd."},
- { 350, "Ovation Networks, Inc."},
- { 351, "Setra Systems"},
- { 352, "AVG Automation"},
- { 353, "ZXC Ltd."},
- { 354, "Byte Sphere"},
- { 355, "Generiton Co., Ltd."},
- { 356, "Holter Regelarmaturen GmbH & Co. KG"},
- { 357, "Bedford Instruments, LLC"},
- { 358, "Standair Inc."},
- { 359, "WEG Automation - R&D"},
- { 360, "Prolon Control Systems ApS"},
- { 361, "Inneasoft"},
- { 362, "ConneXSoft GmbH"},
- { 363, "CEAG Notlichtsysteme GmbH"},
- { 364, "Distech Controls Inc."},
- { 365, "Industrial Technology Research Institute"},
- { 366, "ICONICS, Inc."},
- { 367, "IQ Controls s.c."},
- { 368, "OJ Electronics A/S"},
- { 369, "Rolbit Ltd."},
- { 370, "Synapsys Solutions Ltd."},
- { 371, "ACME Engineering Prod. Ltd."},
- { 372, "Zener Electric Pty, Ltd."},
- { 373, "Selectronix, Inc."},
- { 374, "Gorbet & Banerjee, LLC."},
- { 375, "IME"},
- { 376, "Stephen H. Dawson Computer Service"},
- { 377, "Accutrol, LLC"},
- { 378, "Schneider Elektronik GmbH"},
- { 379, "Alpha-Inno Tec GmbH"},
- { 380, "ADMMicro, Inc."},
- { 381, "Greystone Energy Systems, Inc."},
- { 382, "CAP Technologie"},
- { 383, "KeRo Systems"},
- { 384, "Domat Control System s.r.o."},
- { 385, "Efektronics Pty. Ltd."},
- { 386, "Hekatron Vertriebs GmbH"},
- { 387, "Securiton AG"},
- { 388, "Carlo Gavazzi Controls SpA"},
- { 389, "Chipkin Automation Systems"},
- { 390, "Savant Systems, LLC"},
- { 391, "Simmtronic Lighting Controls"},
- { 392, "Abelko Innovation AB"},
- { 393, "Seresco Technologies Inc."},
- { 394, "IT Watchdogs"},
- { 395, "Automation Assist Japan Corp."},
- { 396, "Thermokon Sensortechnik GmbH"},
- { 397, "EGauge Systems, LLC"},
- { 398, "Quantum Automation (ASIA) PTE, Ltd."},
- { 399, "Toshiba Lighting & Technology Corp."},
- { 400, "SPIN Engenharia de Automaca Ltda."},
- { 401, "Logistics Systems & Software Services India PVT. Ltd."},
- { 402, "Delta Controls Integration Products"},
- { 403, "Focus Media"},
- { 404, "LUMEnergi Inc."},
- { 405, "Kara Systems"},
- { 406, "RF Code, Inc."},
- { 407, "Fatek Automation Corp."},
- { 408, "JANDA Software Company, LLC"},
- { 409, "Open System Solutions Limited"},
- { 410, "Intelec Systems PTY Ltd."},
- { 411, "Ecolodgix, LLC"},
- { 412, "Douglas Lighting Controls"},
- { 413, "iSAtech GmbH intelligente Sensoren Aktoren technologie"},
- { 414, "AREAL"},
- { 415, "Beckhoff Automation GmbH"},
- { 416, "IPAS GmbH"},
- { 417, "KE2 Therm Solutions"},
- { 418, "Base2Products"},
- { 419, "DTL Controls, LLC"},
- { 420, "INNCOM International, Inc."},
- { 421, "BTR Netcom GmbH"},
- { 422, "Greentrol Automation, Inc"},
- { 423, "BELIMO Automation AG"},
- { 424, "Samsung Heavy Industries Co, Ltd"},
- { 425, "Triacta Power Technologies, Inc."},
- { 426, "Globestar Systems"},
- { 427, "MLB Advanced Media, LP"},
- { 428, "SWG Stuckmann Wirtschaftliche Gebaudesysteme GmbH"},
- { 429, "SensorSwitch"},
- { 430, "Multitek Power Limited"},
- { 431, "Aquametro AG"},
- { 432, "LG Electronics Inc."},
- { 433, "Electronic Theatre Controls, Inc."},
- { 434, "Mitsubishi Electric Corporation Nagoya Works"},
- { 435, "Delta Electronics, Inc."},
- { 436, "Elma Kurtalj, Ltd."},
- { 437, "ADT Fire and Security Sp. A.o.o."},
- { 438, "Nedap Security Management"},
- { 439, "ESC Automation Inc."},
- { 440, "DSP4YOU Ltd."},
- { 441, "GE Sensing and Inspection Technologies"},
- { 442, "Embedded Systems SIA"},
- { 443, "BEFEGA GmbH"},
- { 444, "Baseline Inc."},
- { 445, "M2M Systems Integrators"},
- { 446, "OEMCtrl"},
- { 447, "Clarkson Controls Limited"},
- { 448, "Rogerwell Control System Limited"},
- { 449, "SCL Elements"},
- { 450, "Hitachi Ltd."},
- { 451, "Newron System SA"},
- { 452, "BEVECO Gebouwautomatisering BV"},
- { 453, "Streamside Solutions"},
- { 454, "Yellowstone Soft"},
- { 455, "Oztech Intelligent Systems Pty Ltd."},
- { 456, "Novelan GmbH"},
- { 457, "Flexim Americas Corporation"},
- { 458, "ICP DAS Co., Ltd."},
- { 459, "CARMA Industries Inc."},
- { 460, "Log-One Ltd."},
- { 461, "TECO Electric & Machinery Co., Ltd."},
- { 462, "ConnectEx, Inc."},
- { 463, "Turbo DDC Sudwest"},
- { 464, "Quatrosense Environmental Ltd."},
- { 465, "Fifth Light Technology Ltd."},
- { 466, "Scientific Solutions, Ltd."},
- { 467, "Controller Area Network Solutions (M) Sdn Bhd"},
- { 468, "RESOL - Elektronische Regelungen GmbH"},
- { 469, "RPBUS LLC"},
- { 470, "BRS Sistemas Eletronicos"},
- { 471, "WindowMaster A/S"},
- { 472, "Sunlux Technologies Ltd."},
- { 473, "Measurlogic"},
- { 474, "Frimat GmbH"},
- { 475, "Spirax Sarco"},
- { 476, "Luxtron"},
- { 477, "Raypak Inc"},
- { 478, "Air Monitor Corporation"},
- { 479, "Regler Och Webbteknik Sverige (ROWS)"},
- { 480, "Intelligent Lighting Controls Inc."},
- { 481, "Sanyo Electric Industry Co., Ltd"},
- { 482, "E-Mon Energy Monitoring Products"},
- { 483, "Digital Control Systems"},
- { 484, "ATI Airtest Technologies, Inc."},
- { 485, "SCS SA"},
- { 486, "HMS Industrial Networks AB"},
- { 487, "Shenzhen Universal Intellisys Co Ltd"},
- { 488, "EK Intellisys Sdn Bhd"},
- { 489, "SysCom"},
- { 490, "Firecom, Inc."},
- { 491, "ESA Elektroschaltanlagen Grimma GmbH"},
- { 492, "Kumahira Co Ltd"},
- { 493, "Hotraco"},
- { 494, "SABO Elektronik GmbH"},
- { 495, "Equip'Trans"},
- { 496, "TCS Basys Controls"},
- { 497, "FlowCon International A/S"},
- { 498, "ThyssenKrupp Elevator Americas"},
- { 499, "Abatement Technologies"},
- { 500, "Continental Control Systems, LLC"},
- { 501, "WISAG Automatisierungstechnik GmbH & Co KG"},
- { 502, "EasyIO"},
- { 503, "EAP-Electric GmbH"},
- { 504, "Hardmeier"},
- { 505, "Mircom Group of Companies"},
- { 506, "Quest Controls"},
- { 507, "Mestek, Inc"},
- { 508, "Pulse Energy"},
- { 509, "Tachikawa Corporation"},
- { 510, "University of Nebraska-Lincoln"},
- { 511, "Redwood Systems"},
- { 512, "PASStec Industrie-Elektronik GmbH"},
- { 513, "NgEK, Inc."},
- { 514, "FAW Electronics Ltd"},
- { 515, "Jireh Energy Tech Co., Ltd."},
- { 516, "Enlighted Inc."},
- { 517, "El-Piast Sp. Z o.o"},
- { 518, "NetxAutomation Software GmbH"},
- { 519, "Invertek Drives"},
- { 520, "Deutschmann Automation GmbH & Co. KG"},
- { 521, "EMU Electronic AG"},
- { 522, "Phaedrus Limited"},
- { 523, "Sigmatek GmbH & Co KG"},
- { 524, "Marlin Controls"},
- { 525, "Circutor, SA"},
- { 526, "UTC Fire & Security"},
- { 527, "DENT Instruments, Inc."},
- { 528, "FHP Manufacturing Company - Bosch Group"},
- { 529, "GE Intelligent Platforms"},
- { 530, "Inner Range Pty Ltd"},
- { 531, "GLAS Energy Technology"},
- { 532, "MSR-Electronic-GmbH"},
- { 0, NULL }
+ { 0, "ASHRAE" },
+ { 1, "NIST" },
+ { 2, "The Trane Company" },
+ { 3, "McQuay International" },
+ { 4, "PolarSoft" },
+ { 5, "Johnson Controls, Inc." },
+ { 6, "American Auto-Matrix" },
+ { 7, "Siemens Building Technologies, Ltd., Landis & Staefa Division Europe" },
+ { 8, "Delta Controls" },
+ { 9, "Siemens Building Technologies, Inc." },
+ { 10, "Tour Andover Controls Corporation" },
+ { 11, "TAC" },
+ { 12, "Orion Analysis Corporation" },
+ { 13, "Teletrol Systems Inc." },
+ { 14, "Cimetrics Technology" },
+ { 15, "Cornell University" },
+ { 16, "United Technologies Carrier" },
+ { 17, "Honeywell Inc." },
+ { 18, "Alerton / Honeywell" },
+ { 19, "TAC AB" },
+ { 20, "Hewlett-Packard Company" },
+ { 21, "Dorsette's Inc." },
+ { 22, "Cerberus AG" },
+ { 23, "York Controls Group" },
+ { 24, "Automated Logic Corporation" },
+ { 25, "CSI Control Systems International" },
+ { 26, "Phoenix Controls Corporation" },
+ { 27, "Innovex Technologies, Inc." },
+ { 28, "KMC Controls, Inc." },
+ { 29, "Xn Technologies, Inc." },
+ { 30, "Hyundai Information Technology Co., Ltd." },
+ { 31, "Tokimec Inc." },
+ { 32, "Simplex" },
+ { 33, "North Communications Limited" },
+ { 34, "Notifier" },
+ { 35, "Reliable Controls Corporation" },
+ { 36, "Tridium Inc." },
+ { 37, "Sierra Monitor Corp." },
+ { 38, "Silicon Energy" },
+ { 39, "Kieback & Peter GmbH & Co KG" },
+ { 40, "Anacon Systems, Inc." },
+ { 41, "Systems Controls & Instruments, LLC" },
+ { 42, "Lithonia Lighting" },
+ { 43, "Micropower Manufacturing" },
+ { 44, "Matrix Controls" },
+ { 45, "METALAIRE" },
+ { 46, "ESS Engineering" },
+ { 47, "Sphere Systems Pty Ltd." },
+ { 48, "Walker Technologies Corporation" },
+ { 49, "H I Solutions, Inc." },
+ { 50, "MBS GmbH" },
+ { 51, "SAMSON AG" },
+ { 52, "Badger Meter Inc." },
+ { 53, "DAIKIN Industries Ltd." },
+ { 54, "NARA Controls Inc." },
+ { 55, "Mammoth Inc." },
+ { 56, "Liebert Corporation" },
+ { 57, "SEMCO Incorporated" },
+ { 58, "Air Monitor Corporation" },
+ { 59, "TRIATEK, Inc." },
+ { 60, "NexLight" },
+ { 61, "Multistack" },
+ { 62, "TSI Incorporated" },
+ { 63, "Weather-Rite, Inc." },
+ { 64, "Dunham-Bush" },
+ { 65, "Reliance Electric" },
+ { 66, "LCS Inc." },
+ { 67, "Regulator Australia PTY Ltd." },
+ { 68, "Touch-Plate Lighting Controls" },
+ { 69, "Amann GmbH" },
+ { 70, "RLE Technologies" },
+ { 71, "Cardkey Systems" },
+ { 72, "SECOM Co., Ltd." },
+ { 73, "ABB Gebaudetechnik AG Bereich NetServ" },
+ { 74, "KNX Association cvba" },
+ { 75, "Institute of Electrical Installation Engineers of Japan (IEIEJ)" },
+ { 76, "Nohmi Bosai, Ltd." },
+ { 77, "Carel S.p.A." },
+ { 78, "AirSense Technology, Inc." },
+ { 79, "Hochiki Corporation" },
+ { 80, "Fr. Sauter AG" },
+ { 81, "Matsushita Electric Works, Ltd." },
+ { 82, "Mitsubishi Electric Corporation, Inazawa Works" },
+ { 83, "Mitsubishi Heavy Industries, Ltd." },
+ { 84, "ITT Bell & Gossett" },
+ { 85, "Yamatake Building Systems Co., Ltd." },
+ { 86, "The Watt Stopper, Inc." },
+ { 87, "Aichi Tokei Denki Co., Ltd." },
+ { 88, "Activation Technologies, LLC" },
+ { 89, "Saia-Burgess Controls, Ltd." },
+ { 90, "Hitachi, Ltd." },
+ { 91, "Novar Corp./Trend Control Systems Ltd." },
+ { 92, "Mitsubishi Electric Lighting Corporation" },
+ { 93, "Argus Control Systems, Ltd." },
+ { 94, "Kyuki Corporation" },
+ { 95, "Richards-Zeta Building Intelligence, Inc." },
+ { 96, "Scientech R&D, Inc." },
+ { 97, "VCI Controls, Inc." },
+ { 98, "Toshiba Corporation" },
+ { 99, "Mitsubishi Electric Corporation Air Conditioning & Refrigeration Systems Works" },
+ { 100, "Custom Mechanical Equipment, LLC" },
+ { 101, "ClimateMaster" },
+ { 102, "ICP Panel-Tec, Inc." },
+ { 103, "D-Tek Controls" },
+ { 104, "NEC Engineering, Ltd." },
+ { 105, "PRIVA BV" },
+ { 106, "Meidensha Corporation" },
+ { 107, "JCI Systems Integration Services" },
+ { 108, "Freedom Corporation" },
+ { 109, "Neuberger Gebaudeautomation GmbH" },
+ { 110, "Sitronix" },
+ { 111, "Leviton Manufacturing" },
+ { 112, "Fujitsu Limited" },
+ { 113, "Emerson Network Power" },
+ { 114, "S. A. Armstrong, Ltd." },
+ { 115, "Visonet AG" },
+ { 116, "M&M Systems, Inc." },
+ { 117, "Custom Software Engineering" },
+ { 118, "Nittan Company, Limited" },
+ { 119, "Elutions Inc. (Wizcon Systems SAS)" },
+ { 120, "Pacom Systems Pty., Ltd." },
+ { 121, "Unico, Inc." },
+ { 122, "Ebtron, Inc." },
+ { 123, "Scada Engine" },
+ { 124, "AC Technology Corporation" },
+ { 125, "Eagle Technology" },
+ { 126, "Data Aire, Inc." },
+ { 127, "ABB, Inc." },
+ { 128, "Transbit Sp. z o. o." },
+ { 129, "Toshiba Carrier Corporation" },
+ { 130, "Shenzhen Junzhi Hi-Tech Co., Ltd." },
+ { 131, "Tokai Soft" },
+ { 132, "Lumisys" },
+ { 133, "Veris Industries" },
+ { 134, "Centaurus Prime" },
+ { 135, "Sand Network Systems" },
+ { 136, "Regulvar, Inc." },
+ { 137, "Fastek International, Ltd." },
+ { 138, "PowerCold Comfort Air Solutions, Inc." },
+ { 139, "I Controls" },
+ { 140, "Viconics Electronics, Inc." },
+ { 141, "Yaskawa Electric America, Inc." },
+ { 142, "Plueth Regelsysteme" },
+ { 143, "Digitale Mess- und Steuersysteme AG" },
+ { 144, "Fujitsu General Limited" },
+ { 145, "Project Engineering S.r.l." },
+ { 146, "Sanyo Electric Co., Ltd." },
+ { 147, "Integrated Information Systems, Inc." },
+ { 148, "Temco Controls, Ltd." },
+ { 149, "Airtek Technologies, Inc." },
+ { 150, "Advantech Corporation" },
+ { 151, "Titan Products, Ltd." },
+ { 152, "Regel Partners" },
+ { 153, "National Environmental Product" },
+ { 154, "Unitec Corporation" },
+ { 155, "Kanden Engineering Company" },
+ { 156, "Messner Gebaudetechnik GmbH" },
+ { 157, "Integrated.CH" },
+ { 158, "EH Price Limited" },
+ { 159, "SE-Elektronic GmbH" },
+ { 160, "Rockwell Automation" },
+ { 161, "Enflex Corp." },
+ { 162, "ASI Controls" },
+ { 163, "SysMik GmbH Dresden" },
+ { 164, "HSC Regelungstechnik GmbH" },
+ { 165, "Smart Temp Australia Pty. Ltd." },
+ { 166, "PCI Lighting Control Systems" },
+ { 167, "Duksan Mecasys Co., Ltd." },
+ { 168, "Fuji IT Co., Ltd." },
+ { 169, "Vacon Plc" },
+ { 170, "Leader Controls" },
+ { 171, "Cylon Controls, Ltd." },
+ { 172, "Compas" },
+ { 173, "Mitsubishi Electric Building Techno-Service Co., Ltd." },
+ { 174, "Building Control Integrators" },
+ { 175, "ITG Worldwide (M) Sdn Bhd" },
+ { 176, "Lutron Electronics Co., Inc." },
+ { 177, "Cooper-Atkins Corporation" },
+ { 178, "LOYTEC Electronics GmbH" },
+ { 179, "ProLon" },
+ { 180, "Mega Controls Limited" },
+ { 181, "Micro Control Systems, Inc." },
+ { 182, "Kiyon, Inc." },
+ { 183, "Dust Networks" },
+ { 184, "Advanced Building Automation Systems" },
+ { 185, "Hermos AG" },
+ { 186, "CEZIM" },
+ { 187, "Softing" },
+ { 188, "Lynxspring" },
+ { 189, "Schneider Toshiba Inverter Europe" },
+ { 190, "Danfoss Drives A/S" },
+ { 191, "Eaton Corporation" },
+ { 192, "Matyca S.A." },
+ { 193, "Botech AB" },
+ { 194, "Noveo, Inc." },
+ { 195, "AMEV" },
+ { 196, "Yokogawa Electric Corporation" },
+ { 197, "GFR Gesellschaft fur Regelungstechnik" },
+ { 198, "Exact Logic" },
+ { 199, "Mass Electronics Pty Ltd dba Innotech Control Systems Australia" },
+ { 200, "Kandenko Co., Ltd." },
+ { 201, "DTF, Daten-Technik Fries" },
+ { 202, "Klimasoft, Ltd." },
+ { 203, "Toshiba Schneider Inverter Corporation" },
+ { 204, "Control Applications, Ltd." },
+ { 205, "KDT Systems Co., Ltd." },
+ { 206, "Onicon Incorporated" },
+ { 207, "Automation Displays, Inc." },
+ { 208, "Control Solutions, Inc." },
+ { 209, "Remsdaq Limited" },
+ { 210, "NTT Facilities, Inc." },
+ { 211, "VIPA GmbH" },
+ { 212, "TSC21 Association of Japan" },
+ { 213, "BBP Energie Ltee" },
+ { 214, "HRW Limited" },
+ { 215, "Lighting Control & Design, Inc." },
+ { 216, "Mercy Electronic and Electrical Industries" },
+ { 217, "Samsung SDS Co., Ltd" },
+ { 218, "Impact Facility Solutions, Inc." },
+ { 219, "Aircuity" },
+ { 220, "Control Techniques, Ltd." },
+ { 221, "Evolve Control Systems, LLC" },
+ { 222, "WAGO Kontakttechnik GmbH & Co. KG" },
+ { 223, "Cerus Industrial" },
+ { 224, "Chloride Power Protection Company" },
+ { 225, "Computrols, Inc." },
+ { 226, "Phoenix Contact GmbH & Co. KG" },
+ { 227, "Grundfos Management A/S" },
+ { 228, "Ridder Drive Systems" },
+ { 229, "Soft Device SDN BHD" },
+ { 230, "Integrated Control Technology Limited" },
+ { 231, "AIRxpert Systems, Inc." },
+ { 232, "Microtrol Limited" },
+ { 233, "Red Lion Controls" },
+ { 234, "Digital Electronics Corporation" },
+ { 235, "Ennovatis GmbH" },
+ { 236, "Serotonin Software Technologies, Inc." },
+ { 237, "LS Industrial Systems Co., Ltd." },
+ { 238, "Square D Company" },
+ { 239, "S Squared Innovations, Inc." },
+ { 240, "Aricent Ltd." },
+ { 241, "EtherMetrics, LLC" },
+ { 242, "Industrial Control Communications, Inc." },
+ { 243, "Paragon Controls, Inc." },
+ { 244, "A. O. Smith Corporation" },
+ { 245, "Contemporary Control Systems, Inc." },
+ { 246, "Intesis Software SL" },
+ { 247, "Ingenieurgesellschaft N. Hartleb mbH" },
+ { 248, "Heat-Timer Corporation" },
+ { 249, "Ingrasys Technology, Inc." },
+ { 250, "Costerm Building Automation" },
+ { 251, "Wilo AG" },
+ { 252, "Embedia Technologies Corp." },
+ { 253, "Technilog" },
+ { 254, "HR Controls Ltd. & Co. KG" },
+ { 255, "Lennox International, Inc." },
+ { 256, "RK-Tec Rauchklappen-Steuerungssysteme GmbH & Co. KG" },
+ { 257, "Thermomax, Ltd." },
+ { 258, "ELCON Electronic Control, Ltd." },
+ { 259, "Larmia Control AB" },
+ { 260, "BACnet Stack at SourceForge" },
+ { 261, "G4S Security Services A/S" },
+ { 262, "Sitek S.p.A." },
+ { 263, "Cristal Controles" },
+ { 264, "Regin AB" },
+ { 265, "Dimension Software, Inc. " },
+ { 266, "SynapSense Corporation" },
+ { 267, "Beijing Nantree Electronic Co., Ltd." },
+ { 268, "Camus Hydronics Ltd." },
+ { 269, "Kawasaki Heavy Industries, Ltd. " },
+ { 270, "Critical Environment Technologies" },
+ { 271, "ILSHIN IBS Co., Ltd." },
+ { 272, "ELESTA Energy Control AG" },
+ { 273, "KROPMAN Installatietechniek" },
+ { 274, "Baldor Electric Company" },
+ { 275, "INGA mbH" },
+ { 276, "GE Consumer & Industrial" },
+ { 277, "Functional Devices, Inc." },
+ { 278, "ESAC" },
+ { 279, "M-System Co., Ltd." },
+ { 280, "Yokota Co., Ltd." },
+ { 281, "Hitranse Technology Co., LTD" },
+ { 282, "Federspiel Controls" },
+ { 283, "Kele, Inc." },
+ { 284, "Opera Electronics, Inc." },
+ { 285, "Gentec" },
+ { 286, "Embedded Science Labs, LLC" },
+ { 287, "Parker Hannifin Corporation" },
+ { 288, "MaCaPS International Limited" },
+ { 289, "Link4 Corporation" },
+ { 290, "Romutec Steuer-u. Regelsysteme GmbH" },
+ { 291, "Pribusin, Inc." },
+ { 292, "Advantage Controls" },
+ { 293, "Critical Room Control" },
+ { 294, "LEGRAND" },
+ { 295, "Tongdy Control Technology Co., Ltd." },
+ { 296, "ISSARO Integrierte Systemtechnik" },
+ { 297, "Pro-Dev Industries" },
+ { 298, "DRI-STEEM" },
+ { 299, "Creative Electronic GmbH" },
+ { 300, "Swegon AB" },
+ { 301, "Jan Brachacek" },
+ { 302, "Hitachi Appliances, Inc." },
+ { 303, "Real Time Automation, Inc." },
+ { 304, "ITEC Hankyu-Hanshin Co." },
+ { 305, "Cyrus E&M Engineering Co., Ltd." },
+ { 306, "Racine Federated, Inc." },
+ { 307, "Verari Systems, Inc." },
+ { 308, "Elesta GmbH Building Automation" },
+ { 309, "Securiton" },
+ { 310, "OSlsoft, Inc." },
+ { 311, "Hanazeder Electronic GmbH" },
+ { 312, "Honeywell Security Deutschland, Novar GmbH" },
+ { 313, "Siemens Energy & Automation, Inc." },
+ { 314, "ETM Professional Control GmbH" },
+ { 315, "Meitav-tec, Ltd." },
+ { 316, "Janitza Electronics GmbH" },
+ { 317, "MKS Nordhausen" },
+ { 318, "De Gier Drive Systems B.V." },
+ { 319, "Cypress Envirosystems" },
+ { 320, "SMARTron s.r.o." },
+ { 321, "Verari Systems, Inc." },
+ { 322, "K-W Electronic Service, Inc." },
+ { 323, "ALFA-SMART Energy Management" },
+ { 324, "Telkonet, Inc." },
+ { 325, "Securiton GmbH" },
+ { 326, "Cemtrex, Inc." },
+ { 327, "Performance Technologies, Inc." },
+ { 328, "Xtralis (Aust) Pty Ltd" },
+ { 329, "TROX GmbH" },
+ { 330, "Beijing Hysine Technology Co., Ltd" },
+ { 331, "RCK Controls, Inc." },
+ { 332, "ACELIA" },
+ { 333, "Novar/Honeywell" },
+ { 334, "The S4 Group, Inc." },
+ { 335, "Schneider Electric" },
+ { 336, "LHA Systems" },
+ { 337, "GHM engineering Group, Inc." },
+ { 338, "Cllimalux S.A." },
+ { 339, "VAISALA Oyj" },
+ { 340, "COMPLEX (Beijing) Technology, Co., LTD." },
+ { 342, "POWERPEG NSI Limited" },
+ { 343, "BACnet Interoperability Testing Services, Inc." },
+ { 344, "Teco a.s." },
+ { 345, "Plexus Technology Limited"},
+ { 346, "Energy Focus, Inc."},
+ { 347, "Powersmiths International Corp."},
+ { 348, "Nichibei Co., Ltd."},
+ { 349, "HKC Technology Ltd."},
+ { 350, "Ovation Networks, Inc."},
+ { 351, "Setra Systems"},
+ { 352, "AVG Automation"},
+ { 353, "ZXC Ltd."},
+ { 354, "Byte Sphere"},
+ { 355, "Generiton Co., Ltd."},
+ { 356, "Holter Regelarmaturen GmbH & Co. KG"},
+ { 357, "Bedford Instruments, LLC"},
+ { 358, "Standair Inc."},
+ { 359, "WEG Automation - R&D"},
+ { 360, "Prolon Control Systems ApS"},
+ { 361, "Inneasoft"},
+ { 362, "ConneXSoft GmbH"},
+ { 363, "CEAG Notlichtsysteme GmbH"},
+ { 364, "Distech Controls Inc."},
+ { 365, "Industrial Technology Research Institute"},
+ { 366, "ICONICS, Inc."},
+ { 367, "IQ Controls s.c."},
+ { 368, "OJ Electronics A/S"},
+ { 369, "Rolbit Ltd."},
+ { 370, "Synapsys Solutions Ltd."},
+ { 371, "ACME Engineering Prod. Ltd."},
+ { 372, "Zener Electric Pty, Ltd."},
+ { 373, "Selectronix, Inc."},
+ { 374, "Gorbet & Banerjee, LLC."},
+ { 375, "IME"},
+ { 376, "Stephen H. Dawson Computer Service"},
+ { 377, "Accutrol, LLC"},
+ { 378, "Schneider Elektronik GmbH"},
+ { 379, "Alpha-Inno Tec GmbH"},
+ { 380, "ADMMicro, Inc."},
+ { 381, "Greystone Energy Systems, Inc."},
+ { 382, "CAP Technologie"},
+ { 383, "KeRo Systems"},
+ { 384, "Domat Control System s.r.o."},
+ { 385, "Efektronics Pty. Ltd."},
+ { 386, "Hekatron Vertriebs GmbH"},
+ { 387, "Securiton AG"},
+ { 388, "Carlo Gavazzi Controls SpA"},
+ { 389, "Chipkin Automation Systems"},
+ { 390, "Savant Systems, LLC"},
+ { 391, "Simmtronic Lighting Controls"},
+ { 392, "Abelko Innovation AB"},
+ { 393, "Seresco Technologies Inc."},
+ { 394, "IT Watchdogs"},
+ { 395, "Automation Assist Japan Corp."},
+ { 396, "Thermokon Sensortechnik GmbH"},
+ { 397, "EGauge Systems, LLC"},
+ { 398, "Quantum Automation (ASIA) PTE, Ltd."},
+ { 399, "Toshiba Lighting & Technology Corp."},
+ { 400, "SPIN Engenharia de Automaca Ltda."},
+ { 401, "Logistics Systems & Software Services India PVT. Ltd."},
+ { 402, "Delta Controls Integration Products"},
+ { 403, "Focus Media"},
+ { 404, "LUMEnergi Inc."},
+ { 405, "Kara Systems"},
+ { 406, "RF Code, Inc."},
+ { 407, "Fatek Automation Corp."},
+ { 408, "JANDA Software Company, LLC"},
+ { 409, "Open System Solutions Limited"},
+ { 410, "Intelec Systems PTY Ltd."},
+ { 411, "Ecolodgix, LLC"},
+ { 412, "Douglas Lighting Controls"},
+ { 413, "iSAtech GmbH intelligente Sensoren Aktoren technologie"},
+ { 414, "AREAL"},
+ { 415, "Beckhoff Automation GmbH"},
+ { 416, "IPAS GmbH"},
+ { 417, "KE2 Therm Solutions"},
+ { 418, "Base2Products"},
+ { 419, "DTL Controls, LLC"},
+ { 420, "INNCOM International, Inc."},
+ { 421, "BTR Netcom GmbH"},
+ { 422, "Greentrol Automation, Inc"},
+ { 423, "BELIMO Automation AG"},
+ { 424, "Samsung Heavy Industries Co, Ltd"},
+ { 425, "Triacta Power Technologies, Inc."},
+ { 426, "Globestar Systems"},
+ { 427, "MLB Advanced Media, LP"},
+ { 428, "SWG Stuckmann Wirtschaftliche Gebaudesysteme GmbH"},
+ { 429, "SensorSwitch"},
+ { 430, "Multitek Power Limited"},
+ { 431, "Aquametro AG"},
+ { 432, "LG Electronics Inc."},
+ { 433, "Electronic Theatre Controls, Inc."},
+ { 434, "Mitsubishi Electric Corporation Nagoya Works"},
+ { 435, "Delta Electronics, Inc."},
+ { 436, "Elma Kurtalj, Ltd."},
+ { 437, "ADT Fire and Security Sp. A.o.o."},
+ { 438, "Nedap Security Management"},
+ { 439, "ESC Automation Inc."},
+ { 440, "DSP4YOU Ltd."},
+ { 441, "GE Sensing and Inspection Technologies"},
+ { 442, "Embedded Systems SIA"},
+ { 443, "BEFEGA GmbH"},
+ { 444, "Baseline Inc."},
+ { 445, "M2M Systems Integrators"},
+ { 446, "OEMCtrl"},
+ { 447, "Clarkson Controls Limited"},
+ { 448, "Rogerwell Control System Limited"},
+ { 449, "SCL Elements"},
+ { 450, "Hitachi Ltd."},
+ { 451, "Newron System SA"},
+ { 452, "BEVECO Gebouwautomatisering BV"},
+ { 453, "Streamside Solutions"},
+ { 454, "Yellowstone Soft"},
+ { 455, "Oztech Intelligent Systems Pty Ltd."},
+ { 456, "Novelan GmbH"},
+ { 457, "Flexim Americas Corporation"},
+ { 458, "ICP DAS Co., Ltd."},
+ { 459, "CARMA Industries Inc."},
+ { 460, "Log-One Ltd."},
+ { 461, "TECO Electric & Machinery Co., Ltd."},
+ { 462, "ConnectEx, Inc."},
+ { 463, "Turbo DDC Sudwest"},
+ { 464, "Quatrosense Environmental Ltd."},
+ { 465, "Fifth Light Technology Ltd."},
+ { 466, "Scientific Solutions, Ltd."},
+ { 467, "Controller Area Network Solutions (M) Sdn Bhd"},
+ { 468, "RESOL - Elektronische Regelungen GmbH"},
+ { 469, "RPBUS LLC"},
+ { 470, "BRS Sistemas Eletronicos"},
+ { 471, "WindowMaster A/S"},
+ { 472, "Sunlux Technologies Ltd."},
+ { 473, "Measurlogic"},
+ { 474, "Frimat GmbH"},
+ { 475, "Spirax Sarco"},
+ { 476, "Luxtron"},
+ { 477, "Raypak Inc"},
+ { 478, "Air Monitor Corporation"},
+ { 479, "Regler Och Webbteknik Sverige (ROWS)"},
+ { 480, "Intelligent Lighting Controls Inc."},
+ { 481, "Sanyo Electric Industry Co., Ltd"},
+ { 482, "E-Mon Energy Monitoring Products"},
+ { 483, "Digital Control Systems"},
+ { 484, "ATI Airtest Technologies, Inc."},
+ { 485, "SCS SA"},
+ { 486, "HMS Industrial Networks AB"},
+ { 487, "Shenzhen Universal Intellisys Co Ltd"},
+ { 488, "EK Intellisys Sdn Bhd"},
+ { 489, "SysCom"},
+ { 490, "Firecom, Inc."},
+ { 491, "ESA Elektroschaltanlagen Grimma GmbH"},
+ { 492, "Kumahira Co Ltd"},
+ { 493, "Hotraco"},
+ { 494, "SABO Elektronik GmbH"},
+ { 495, "Equip'Trans"},
+ { 496, "TCS Basys Controls"},
+ { 497, "FlowCon International A/S"},
+ { 498, "ThyssenKrupp Elevator Americas"},
+ { 499, "Abatement Technologies"},
+ { 500, "Continental Control Systems, LLC"},
+ { 501, "WISAG Automatisierungstechnik GmbH & Co KG"},
+ { 502, "EasyIO"},
+ { 503, "EAP-Electric GmbH"},
+ { 504, "Hardmeier"},
+ { 505, "Mircom Group of Companies"},
+ { 506, "Quest Controls"},
+ { 507, "Mestek, Inc"},
+ { 508, "Pulse Energy"},
+ { 509, "Tachikawa Corporation"},
+ { 510, "University of Nebraska-Lincoln"},
+ { 511, "Redwood Systems"},
+ { 512, "PASStec Industrie-Elektronik GmbH"},
+ { 513, "NgEK, Inc."},
+ { 514, "FAW Electronics Ltd"},
+ { 515, "Jireh Energy Tech Co., Ltd."},
+ { 516, "Enlighted Inc."},
+ { 517, "El-Piast Sp. Z o.o"},
+ { 518, "NetxAutomation Software GmbH"},
+ { 519, "Invertek Drives"},
+ { 520, "Deutschmann Automation GmbH & Co. KG"},
+ { 521, "EMU Electronic AG"},
+ { 522, "Phaedrus Limited"},
+ { 523, "Sigmatek GmbH & Co KG"},
+ { 524, "Marlin Controls"},
+ { 525, "Circutor, SA"},
+ { 526, "UTC Fire & Security"},
+ { 527, "DENT Instruments, Inc."},
+ { 528, "FHP Manufacturing Company - Bosch Group"},
+ { 529, "GE Intelligent Platforms"},
+ { 530, "Inner Range Pty Ltd"},
+ { 531, "GLAS Energy Technology"},
+ { 532, "MSR-Electronic-GmbH"},
+ { 0, NULL }
};
static int proto_bacapp = -1;
@@ -4463,50 +4461,50 @@ static int st_node_packets_by_ip_src = -1;
static void
bacapp_packet_stats_tree_init(stats_tree* st)
{
- st_node_packets_by_ip = stats_tree_create_pivot(st, st_str_packets_by_ip, 0);
- st_node_packets_by_ip_src = stats_tree_create_node(st, st_str_packets_by_ip_src, st_node_packets_by_ip, TRUE);
- st_node_packets_by_ip_dst = stats_tree_create_node(st, st_str_packets_by_ip_dst, st_node_packets_by_ip, TRUE);
+ st_node_packets_by_ip = stats_tree_create_pivot(st, st_str_packets_by_ip, 0);
+ st_node_packets_by_ip_src = stats_tree_create_node(st, st_str_packets_by_ip_src, st_node_packets_by_ip, TRUE);
+ st_node_packets_by_ip_dst = stats_tree_create_node(st, st_str_packets_by_ip_dst, st_node_packets_by_ip, TRUE);
}
static int
bacapp_stats_tree_packet(stats_tree* st, packet_info* pinfo, epan_dissect_t* edt _U_, const void* p)
{
- int packets_for_this_dst;
- int packets_for_this_src;
- int service_for_this_dst;
- int service_for_this_src;
- int src_for_this_dst;
- int dst_for_this_src;
- int objectid_for_this_dst;
- int objectid_for_this_src;
- int instanceid_for_this_dst;
- int instanceid_for_this_src;
- gchar *dststr;
- gchar *srcstr;
- const bacapp_info_value_t *binfo = p;
-
- srcstr = ep_strconcat("Src: ", address_to_str(&pinfo->src), NULL);
- dststr = ep_strconcat("Dst: ", address_to_str(&pinfo->dst), NULL);
-
- tick_stat_node(st, st_str_packets_by_ip, 0, TRUE);
- packets_for_this_dst = tick_stat_node(st, st_str_packets_by_ip_dst, st_node_packets_by_ip, TRUE);
- packets_for_this_src = tick_stat_node(st, st_str_packets_by_ip_src, st_node_packets_by_ip, TRUE);
- src_for_this_dst = tick_stat_node(st, dststr, packets_for_this_dst, TRUE);
- dst_for_this_src = tick_stat_node(st, srcstr, packets_for_this_src, TRUE);
- service_for_this_src = tick_stat_node(st, dststr, dst_for_this_src, TRUE);
- service_for_this_dst = tick_stat_node(st, srcstr, src_for_this_dst, TRUE);
- if (binfo->service_type) {
- objectid_for_this_dst = tick_stat_node(st, binfo->service_type, service_for_this_dst, TRUE);
- objectid_for_this_src = tick_stat_node(st, binfo->service_type, service_for_this_src, TRUE);
- if (binfo->object_ident) {
- instanceid_for_this_dst=tick_stat_node(st, binfo->object_ident, objectid_for_this_dst, TRUE);
- tick_stat_node(st, binfo->instance_ident, instanceid_for_this_dst, FALSE);
- instanceid_for_this_src=tick_stat_node(st, binfo->object_ident, objectid_for_this_src, TRUE);
- tick_stat_node(st, binfo->instance_ident, instanceid_for_this_src, FALSE);
- }
- }
-
- return 1;
+ int packets_for_this_dst;
+ int packets_for_this_src;
+ int service_for_this_dst;
+ int service_for_this_src;
+ int src_for_this_dst;
+ int dst_for_this_src;
+ int objectid_for_this_dst;
+ int objectid_for_this_src;
+ int instanceid_for_this_dst;
+ int instanceid_for_this_src;
+ gchar *dststr;
+ gchar *srcstr;
+ const bacapp_info_value_t *binfo = p;
+
+ srcstr = ep_strconcat("Src: ", address_to_str(&pinfo->src), NULL);
+ dststr = ep_strconcat("Dst: ", address_to_str(&pinfo->dst), NULL);
+
+ tick_stat_node(st, st_str_packets_by_ip, 0, TRUE);
+ packets_for_this_dst = tick_stat_node(st, st_str_packets_by_ip_dst, st_node_packets_by_ip, TRUE);
+ packets_for_this_src = tick_stat_node(st, st_str_packets_by_ip_src, st_node_packets_by_ip, TRUE);
+ src_for_this_dst = tick_stat_node(st, dststr, packets_for_this_dst, TRUE);
+ dst_for_this_src = tick_stat_node(st, srcstr, packets_for_this_src, TRUE);
+ service_for_this_src = tick_stat_node(st, dststr, dst_for_this_src, TRUE);
+ service_for_this_dst = tick_stat_node(st, srcstr, src_for_this_dst, TRUE);
+ if (binfo->service_type) {
+ objectid_for_this_dst = tick_stat_node(st, binfo->service_type, service_for_this_dst, TRUE);
+ objectid_for_this_src = tick_stat_node(st, binfo->service_type, service_for_this_src, TRUE);
+ if (binfo->object_ident) {
+ instanceid_for_this_dst = tick_stat_node(st, binfo->object_ident, objectid_for_this_dst, TRUE);
+ tick_stat_node(st, binfo->instance_ident, instanceid_for_this_dst, FALSE);
+ instanceid_for_this_src = tick_stat_node(st, binfo->object_ident, objectid_for_this_src, TRUE);
+ tick_stat_node(st, binfo->instance_ident, instanceid_for_this_src, FALSE);
+ }
+ }
+
+ return 1;
}
/* Stat: BACnet Packets sorted by Service */
@@ -4516,35 +4514,36 @@ static int st_node_packets_by_service = -1;
static void
bacapp_service_stats_tree_init(stats_tree* st)
{
- st_node_packets_by_service = stats_tree_create_pivot(st, st_str_packets_by_service, 0);
+ st_node_packets_by_service = stats_tree_create_pivot(st, st_str_packets_by_service, 0);
}
static int
bacapp_stats_tree_service(stats_tree* st, packet_info* pinfo, epan_dissect_t* edt _U_, const void* p)
{
- int servicetype;
- int src,dst;
- int objectid;
+ int servicetype;
+ int src,dst;
+ int objectid;
+
+ gchar *dststr;
+ gchar *srcstr;
- gchar *dststr;
- gchar *srcstr;
- const bacapp_info_value_t *binfo = p;
+ const bacapp_info_value_t *binfo = p;
- srcstr = ep_strconcat("Src: ", address_to_str(&pinfo->src), NULL);
- dststr = ep_strconcat("Dst: ", address_to_str(&pinfo->dst), NULL);
+ srcstr = ep_strconcat("Src: ", address_to_str(&pinfo->src), NULL);
+ dststr = ep_strconcat("Dst: ", address_to_str(&pinfo->dst), NULL);
- tick_stat_node(st, st_str_packets_by_service, 0, TRUE);
- if (binfo->service_type) {
- servicetype = tick_stat_node(st, binfo->service_type, st_node_packets_by_service, TRUE);
- src = tick_stat_node(st, srcstr, servicetype, TRUE);
- dst = tick_stat_node(st, dststr, src, TRUE);
- if (binfo->object_ident) {
- objectid = tick_stat_node(st, binfo->object_ident, dst, TRUE);
- tick_stat_node(st, binfo->instance_ident, objectid, FALSE);
- }
- }
+ tick_stat_node(st, st_str_packets_by_service, 0, TRUE);
+ if (binfo->service_type) {
+ servicetype = tick_stat_node(st, binfo->service_type, st_node_packets_by_service, TRUE);
+ src = tick_stat_node(st, srcstr, servicetype, TRUE);
+ dst = tick_stat_node(st, dststr, src, TRUE);
+ if (binfo->object_ident) {
+ objectid = tick_stat_node(st, binfo->object_ident, dst, TRUE);
+ tick_stat_node(st, binfo->instance_ident, objectid, FALSE);
+ }
+ }
- return 1;
+ return 1;
}
/* Stat: BACnet Packets sorted by Object Type */
@@ -4554,72 +4553,72 @@ static int st_node_packets_by_objectid = -1;
static void
bacapp_objectid_stats_tree_init(stats_tree* st)
{
- st_node_packets_by_objectid = stats_tree_create_pivot(st, st_str_packets_by_objectid, 0);
+ st_node_packets_by_objectid = stats_tree_create_pivot(st, st_str_packets_by_objectid, 0);
}
static int
bacapp_stats_tree_objectid(stats_tree* st, packet_info* pinfo, epan_dissect_t* edt _U_, const void* p)
{
- int servicetype;
- int src,dst;
- int objectid;
+ int servicetype;
+ int src,dst;
+ int objectid;
- gchar *dststr;
- gchar *srcstr;
- const bacapp_info_value_t *binfo = p;
+ gchar *dststr;
+ gchar *srcstr;
+ const bacapp_info_value_t *binfo = p;
- srcstr = ep_strconcat("Src: ", address_to_str(&pinfo->src), NULL);
- dststr = ep_strconcat("Dst: ", address_to_str(&pinfo->dst), NULL);
+ srcstr = ep_strconcat("Src: ", address_to_str(&pinfo->src), NULL);
+ dststr = ep_strconcat("Dst: ", address_to_str(&pinfo->dst), NULL);
- tick_stat_node(st, st_str_packets_by_objectid, 0, TRUE);
- if (binfo->object_ident) {
- objectid = tick_stat_node(st, binfo->object_ident, st_node_packets_by_objectid, TRUE);
- src = tick_stat_node(st, srcstr, objectid, TRUE);
- dst = tick_stat_node(st, dststr, src, TRUE);
- if (binfo->service_type) {
- servicetype = tick_stat_node(st, binfo->service_type, dst, TRUE);
- tick_stat_node(st, binfo->instance_ident, servicetype, FALSE);
- }
- }
+ tick_stat_node(st, st_str_packets_by_objectid, 0, TRUE);
+ if (binfo->object_ident) {
+ objectid = tick_stat_node(st, binfo->object_ident, st_node_packets_by_objectid, TRUE);
+ src = tick_stat_node(st, srcstr, objectid, TRUE);
+ dst = tick_stat_node(st, dststr, src, TRUE);
+ if (binfo->service_type) {
+ servicetype = tick_stat_node(st, binfo->service_type, dst, TRUE);
+ tick_stat_node(st, binfo->instance_ident, servicetype, FALSE);
+ }
+ }
- return 1;
+ return 1;
}
/* Stat: BACnet Packets sorted by Instance No */
-static const gchar* st_str_packets_by_instanceid = "BACnet Packets by Instance ID";
-static int st_node_packets_by_instanceid = -1;
+static const gchar* st_str_packets_by_instanceid = "BACnet Packets by Instance ID";
+static int st_node_packets_by_instanceid = -1;
static void
bacapp_instanceid_stats_tree_init(stats_tree* st)
{
- st_node_packets_by_instanceid = stats_tree_create_pivot(st, st_str_packets_by_instanceid, 0);
+ st_node_packets_by_instanceid = stats_tree_create_pivot(st, st_str_packets_by_instanceid, 0);
}
static int
bacapp_stats_tree_instanceid(stats_tree* st, packet_info* pinfo, epan_dissect_t* edt _U_, const void* p)
{
- int servicetype;
- int src,dst;
- int instanceid;
+ int servicetype;
+ int src,dst;
+ int instanceid;
- gchar *dststr;
- gchar *srcstr;
- const bacapp_info_value_t *binfo = p;
+ gchar *dststr;
+ gchar *srcstr;
+ const bacapp_info_value_t *binfo = p;
- srcstr = ep_strconcat("Src: ", address_to_str(&pinfo->src), NULL);
- dststr = ep_strconcat("Dst: ", address_to_str(&pinfo->dst), NULL);
+ srcstr = ep_strconcat("Src: ", address_to_str(&pinfo->src), NULL);
+ dststr = ep_strconcat("Dst: ", address_to_str(&pinfo->dst), NULL);
- tick_stat_node(st, st_str_packets_by_instanceid, 0, TRUE);
- if (binfo->object_ident) {
- instanceid = tick_stat_node(st, binfo->instance_ident, st_node_packets_by_instanceid, TRUE);
- src = tick_stat_node(st, srcstr, instanceid, TRUE);
- dst = tick_stat_node(st, dststr, src, TRUE);
- if (binfo->service_type) {
- servicetype = tick_stat_node(st, binfo->service_type, dst, TRUE);
- tick_stat_node(st, binfo->object_ident, servicetype, FALSE);
- }
- }
- return 1;
+ tick_stat_node(st, st_str_packets_by_instanceid, 0, TRUE);
+ if (binfo->object_ident) {
+ instanceid = tick_stat_node(st, binfo->instance_ident, st_node_packets_by_instanceid, TRUE);
+ src = tick_stat_node(st, srcstr, instanceid, TRUE);
+ dst = tick_stat_node(st, dststr, src, TRUE);
+ if (binfo->service_type) {
+ servicetype = tick_stat_node(st, binfo->service_type, dst, TRUE);
+ tick_stat_node(st, binfo->object_ident, servicetype, FALSE);
+ }
+ }
+ return 1;
}
@@ -4627,58 +4626,58 @@ bacapp_stats_tree_instanceid(stats_tree* st, packet_info* pinfo, epan_dissect_t*
static void
register_bacapp_stat_trees(void)
{
- stats_tree_register("bacapp","bacapp_ip","BACnet/Packets sorted by IP", 0,
- bacapp_stats_tree_packet, bacapp_packet_stats_tree_init, NULL);
- stats_tree_register("bacapp","bacapp_service","BACnet/Packets sorted by Service", 0,
- bacapp_stats_tree_service, bacapp_service_stats_tree_init, NULL);
- stats_tree_register("bacapp","bacapp_objectid","BACnet/Packets sorted by Object Type", 0,
- bacapp_stats_tree_objectid, bacapp_objectid_stats_tree_init, NULL);
- stats_tree_register("bacapp","bacapp_instanceid","BACnet/Packets sorted by Instance ID", 0,
- bacapp_stats_tree_instanceid, bacapp_instanceid_stats_tree_init, NULL);
+ stats_tree_register("bacapp","bacapp_ip","BACnet/Packets sorted by IP", 0,
+ bacapp_stats_tree_packet, bacapp_packet_stats_tree_init, NULL);
+ stats_tree_register("bacapp","bacapp_service","BACnet/Packets sorted by Service", 0,
+ bacapp_stats_tree_service, bacapp_service_stats_tree_init, NULL);
+ stats_tree_register("bacapp","bacapp_objectid","BACnet/Packets sorted by Object Type", 0,
+ bacapp_stats_tree_objectid, bacapp_objectid_stats_tree_init, NULL);
+ stats_tree_register("bacapp","bacapp_instanceid","BACnet/Packets sorted by Instance ID", 0,
+ bacapp_stats_tree_instanceid, bacapp_instanceid_stats_tree_init, NULL);
}
/* 'data' must be ep_ allocated */
static gint
updateBacnetInfoValue(gint whichval, gchar *data)
{
- if (whichval == BACINFO_SERVICE) {
- bacinfo.service_type = data;
- return 0;
- }
- if (whichval == BACINFO_INVOKEID) {
- bacinfo.invoke_id = data;
- return 0;
- }
- if (whichval == BACINFO_OBJECTID) {
- bacinfo.object_ident = data;
- return 0;
- }
- if (whichval == BACINFO_INSTANCEID) {
- bacinfo.instance_ident = data;
- return 0;
- }
- return -1;
+ if (whichval == BACINFO_SERVICE) {
+ bacinfo.service_type = data;
+ return 0;
+ }
+ if (whichval == BACINFO_INVOKEID) {
+ bacinfo.invoke_id = data;
+ return 0;
+ }
+ if (whichval == BACINFO_OBJECTID) {
+ bacinfo.object_ident = data;
+ return 0;
+ }
+ if (whichval == BACINFO_INSTANCEID) {
+ bacinfo.instance_ident = data;
+ return 0;
+ }
+ return -1;
}
static const fragment_items msg_frag_items = {
- /* Fragment subtrees */
- &ett_msg_fragment,
- &ett_msg_fragments,
- /* Fragment fields */
- &hf_msg_fragments,
- &hf_msg_fragment,
- &hf_msg_fragment_overlap,
- &hf_msg_fragment_overlap_conflicts,
- &hf_msg_fragment_multiple_tails,
- &hf_msg_fragment_too_long_fragment,
- &hf_msg_fragment_error,
- &hf_msg_fragment_count,
- /* Reassembled in field */
- &hf_msg_reassembled_in,
- /* Reassembled length field */
- &hf_msg_reassembled_length,
- /* Tag */
- "Message fragments"
+ /* Fragment subtrees */
+ &ett_msg_fragment,
+ &ett_msg_fragments,
+ /* Fragment fields */
+ &hf_msg_fragments,
+ &hf_msg_fragment,
+ &hf_msg_fragment_overlap,
+ &hf_msg_fragment_overlap_conflicts,
+ &hf_msg_fragment_multiple_tails,
+ &hf_msg_fragment_too_long_fragment,
+ &hf_msg_fragment_error,
+ &hf_msg_fragment_count,
+ /* Reassembled in field */
+ &hf_msg_reassembled_in,
+ /* Reassembled length field */
+ &hf_msg_reassembled_length,
+ /* Tag */
+ "Message fragments"
};
/* if BACnet uses the reserved values, then patch the corresponding values here, maximum 16 values are defined */
@@ -4689,14 +4688,14 @@ static const guint MaxAPDUSize [] = { 50,128,206,480,1024,1476 };
static guint
fGetMaxAPDUSize(guint8 idx)
{
- /* only 16 values are defined, so use & 0x0f */
- /* check the size of the Array, deliver either the entry
- or the first entry if idx is outside of the array (bug 3736 comment#7) */
+ /* only 16 values are defined, so use & 0x0f */
+ /* check the size of the Array, deliver either the entry
+ or the first entry if idx is outside of the array (bug 3736 comment#7) */
- if ((idx & 0x0f) >= (gint)(sizeof(MaxAPDUSize)/sizeof(guint)))
- return MaxAPDUSize[0];
- else
- return MaxAPDUSize[idx & 0x0f];
+ if ((idx & 0x0f) >= (gint)(sizeof(MaxAPDUSize)/sizeof(guint)))
+ return MaxAPDUSize[0];
+ else
+ return MaxAPDUSize[idx & 0x0f];
}
#endif
@@ -4704,12 +4703,12 @@ fGetMaxAPDUSize(guint8 idx)
/* Used when there are ranges of reserved and proprietary enumerations */
static const char*
val_to_split_str(guint32 val, guint32 split_val, const value_string *vs,
- const char *fmt, const char *split_fmt)
+ const char *fmt, const char *split_fmt)
{
- if (val < split_val)
- return val_to_str(val, vs, fmt);
- else
- return val_to_str(val, vs, split_fmt);
+ if (val < split_val)
+ return val_to_str(val, vs, fmt);
+ else
+ return val_to_str(val, vs, split_fmt);
}
/* from clause 20.2.1.3.2 Constructed Data */
@@ -4717,19 +4716,19 @@ val_to_split_str(guint32 val, guint32 split_val, const value_string *vs,
static gboolean
tag_is_extended_value(guint8 tag)
{
- return (tag & 0x07) == 5;
+ return (tag & 0x07) == 5;
}
static gboolean
tag_is_opening(guint8 tag)
{
- return (tag & 0x07) == 6;
+ return (tag & 0x07) == 6;
}
static gboolean
tag_is_closing(guint8 tag)
{
- return (tag & 0x07) == 7;
+ return (tag & 0x07) == 7;
}
/* from clause 20.2.1.1 Class
@@ -4738,77 +4737,77 @@ tag_is_closing(guint8 tag)
static gboolean
tag_is_context_specific(guint8 tag)
{
- return (tag & 0x08) != 0;
+ return (tag & 0x08) != 0;
}
static gboolean
tag_is_extended_tag_number(guint8 tag)
{
- return ((tag & 0xF0) == 0xF0);
+ return ((tag & 0xF0) == 0xF0);
}
static guint32
object_id_type(guint32 object_identifier)
{
- return ((object_identifier >> 22) & 0x3FF);
+ return ((object_identifier >> 22) & 0x3FF);
}
static guint32
object_id_instance(guint32 object_identifier)
{
- return (object_identifier & 0x3FFFFF);
+ return (object_identifier & 0x3FFFFF);
}
static guint
fTagNo (tvbuff_t *tvb, guint offset)
{
- return (guint)(tvb_get_guint8(tvb, offset) >> 4);
+ return (guint)(tvb_get_guint8(tvb, offset) >> 4);
}
static gboolean
fUnsigned32 (tvbuff_t *tvb, guint offset, guint32 lvt, guint32 *val)
{
- gboolean valid = TRUE;
-
- switch (lvt) {
- case 1:
- *val = tvb_get_guint8(tvb, offset);
- break;
- case 2:
- *val = tvb_get_ntohs(tvb, offset);
- break;
- case 3:
- *val = tvb_get_ntoh24(tvb, offset);
- break;
- case 4:
- *val = tvb_get_ntohl(tvb, offset);
- break;
- default:
- valid = FALSE;
- break;
- }
-
- return valid;
+ gboolean valid = TRUE;
+
+ switch (lvt) {
+ case 1:
+ *val = tvb_get_guint8(tvb, offset);
+ break;
+ case 2:
+ *val = tvb_get_ntohs(tvb, offset);
+ break;
+ case 3:
+ *val = tvb_get_ntoh24(tvb, offset);
+ break;
+ case 4:
+ *val = tvb_get_ntohl(tvb, offset);
+ break;
+ default:
+ valid = FALSE;
+ break;
+ }
+
+ return valid;
}
static gboolean
fUnsigned64 (tvbuff_t *tvb, guint offset, guint32 lvt, guint64 *val)
{
- gboolean valid = FALSE;
- gint64 value = 0;
- guint8 data, i;
+ gboolean valid = FALSE;
+ gint64 value = 0;
+ guint8 data, i;
- if (lvt && (lvt <= 8)) {
- valid = TRUE;
- data = tvb_get_guint8(tvb, offset);
- for (i = 0; i < lvt; i++) {
- data = tvb_get_guint8(tvb, offset+i);
- value = (value << 8) + data;
- }
- *val = value;
- }
+ if (lvt && (lvt <= 8)) {
+ valid = TRUE;
+ data = tvb_get_guint8(tvb, offset);
+ for (i = 0; i < lvt; i++) {
+ data = tvb_get_guint8(tvb, offset+i);
+ value = (value << 8) + data;
+ }
+ *val = value;
+ }
- return valid;
+ return valid;
}
/* BACnet Signed Value uses 2's complement notation, but with a twist:
@@ -4820,930 +4819,931 @@ fUnsigned64 (tvbuff_t *tvb, guint offset, guint32 lvt, guint64 *val)
static gboolean
fSigned64 (tvbuff_t *tvb, guint offset, guint32 lvt, gint64 *val)
{
- gboolean valid = FALSE;
- gint64 value = 0;
- guint8 data;
- guint32 i;
+ gboolean valid = FALSE;
+ gint64 value = 0;
+ guint8 data;
+ guint32 i;
- /* we can only handle 7 bytes for a 64-bit value due to signed-ness */
- if (lvt && (lvt <= 7)) {
- valid = TRUE;
- data = tvb_get_guint8(tvb, offset);
- if ((data & 0x80) != 0)
- value = (-1 << 8) | data;
- else
- value = data;
- for (i = 1; i < lvt; i++) {
- data = tvb_get_guint8(tvb, offset+i);
- value = (value << 8) + data;
- }
- *val = value;
- }
+ /* we can only handle 7 bytes for a 64-bit value due to signed-ness */
+ if (lvt && (lvt <= 7)) {
+ valid = TRUE;
+ data = tvb_get_guint8(tvb, offset);
+ if ((data & 0x80) != 0)
+ value = (-1 << 8) | data;
+ else
+ value = data;
+ for (i = 1; i < lvt; i++) {
+ data = tvb_get_guint8(tvb, offset+i);
+ value = (value << 8) + data;
+ }
+ *val = value;
+ }
- return valid;
+ return valid;
}
static guint
fTagHeaderTree (tvbuff_t *tvb, proto_tree *tree, guint offset,
- guint8 *tag_no, guint8* tag_info, guint32 *lvt)
-{
- guint8 tag;
- guint8 value;
- guint tag_len = 1;
- guint lvt_len = 1; /* used for tree display of lvt */
- guint lvt_offset; /* used for tree display of lvt */
- proto_item *ti;
- proto_tree *subtree;
-
- lvt_offset = offset;
- tag = tvb_get_guint8(tvb, offset);
- *tag_info = 0;
- *lvt = tag & 0x07;
- /* To solve the problem of lvt values of 6/7 being indeterminate - it */
- /* can mean open/close tag or length of 6/7 after the length is */
- /* computed below - store whole tag info, not just context bit. */
- if (tag_is_context_specific(tag)) *tag_info = tag & 0x0F;
- *tag_no = tag >> 4;
- if (tag_is_extended_tag_number(tag)) {
- *tag_no = tvb_get_guint8(tvb, offset + tag_len++);
- }
- if (tag_is_extended_value(tag)) { /* length is more than 4 Bytes */
- lvt_offset += tag_len;
- value = tvb_get_guint8(tvb, lvt_offset);
- tag_len++;
- if (value == 254) { /* length is encoded with 16 Bits */
- *lvt = tvb_get_ntohs(tvb, lvt_offset+1);
- tag_len += 2;
- lvt_len += 2;
- } else if (value == 255) { /* length is encoded with 32 Bits */
- *lvt = tvb_get_ntohl(tvb, lvt_offset+1);
- tag_len += 4;
- lvt_len += 4;
- } else
- *lvt = value;
- }
-
- if (tree) {
- if (tag_is_opening(tag))
- ti = proto_tree_add_text(tree, tvb, offset, tag_len, "{[%u]", *tag_no );
- else if (tag_is_closing(tag))
- ti = proto_tree_add_text(tree, tvb, offset, tag_len, "}[%u]", *tag_no );
- else if (tag_is_context_specific(tag)) {
- ti = proto_tree_add_text(tree, tvb, offset, tag_len,
- "Context Tag: %u, Length/Value/Type: %u",
- *tag_no, *lvt);
- } else
- ti = proto_tree_add_text(tree, tvb, offset, tag_len,
- "Application Tag: %s, Length/Value/Type: %u",
- val_to_str(*tag_no,
- BACnetApplicationTagNumber,
- ASHRAE_Reserved_Fmt),
- *lvt);
-
- subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
- /* details if needed */
- proto_tree_add_item(subtree, hf_BACnetTagClass, tvb, offset, 1, ENC_BIG_ENDIAN);
- if (tag_is_extended_tag_number(tag)) {
- proto_tree_add_uint_format(subtree,
- hf_BACnetContextTagNumber,
- tvb, offset, 1, tag,
- "Extended Tag Number");
- proto_tree_add_item(subtree,
- hf_BACnetExtendedTagNumber,
- tvb, offset + 1, 1, ENC_BIG_ENDIAN);
- } else {
- if (tag_is_context_specific(tag))
- proto_tree_add_item(subtree,
- hf_BACnetContextTagNumber,
- tvb, offset, 1, ENC_BIG_ENDIAN);
- else
- proto_tree_add_item(subtree,
- hf_BACnetApplicationTagNumber,
- tvb, offset, 1, ENC_BIG_ENDIAN);
- }
- if (tag_is_closing(tag) || tag_is_opening(tag))
- proto_tree_add_item(subtree,
- hf_BACnetNamedTag,
- tvb, offset, 1, ENC_BIG_ENDIAN);
- else if (tag_is_extended_value(tag)) {
- proto_tree_add_item(subtree,
- hf_BACnetNamedTag,
- tvb, offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_uint(subtree, hf_bacapp_tag_lvt,
- tvb, lvt_offset, lvt_len, *lvt);
- } else
- proto_tree_add_uint(subtree, hf_bacapp_tag_lvt,
- tvb, lvt_offset, lvt_len, *lvt);
- }
-
- return tag_len;
+ guint8 *tag_no, guint8* tag_info, guint32 *lvt)
+{
+ guint8 tag;
+ guint8 value;
+ guint tag_len = 1;
+ guint lvt_len = 1; /* used for tree display of lvt */
+ guint lvt_offset; /* used for tree display of lvt */
+ proto_item *ti;
+ proto_tree *subtree;
+
+ lvt_offset = offset;
+ tag = tvb_get_guint8(tvb, offset);
+ *tag_info = 0;
+ *lvt = tag & 0x07;
+
+ /* To solve the problem of lvt values of 6/7 being indeterminate - it */
+ /* can mean open/close tag or length of 6/7 after the length is */
+ /* computed below - store whole tag info, not just context bit. */
+ if (tag_is_context_specific(tag)) *tag_info = tag & 0x0F;
+ *tag_no = tag >> 4;
+ if (tag_is_extended_tag_number(tag)) {
+ *tag_no = tvb_get_guint8(tvb, offset + tag_len++);
+ }
+ if (tag_is_extended_value(tag)) { /* length is more than 4 Bytes */
+ lvt_offset += tag_len;
+ value = tvb_get_guint8(tvb, lvt_offset);
+ tag_len++;
+ if (value == 254) { /* length is encoded with 16 Bits */
+ *lvt = tvb_get_ntohs(tvb, lvt_offset+1);
+ tag_len += 2;
+ lvt_len += 2;
+ } else if (value == 255) { /* length is encoded with 32 Bits */
+ *lvt = tvb_get_ntohl(tvb, lvt_offset+1);
+ tag_len += 4;
+ lvt_len += 4;
+ } else
+ *lvt = value;
+ }
+
+ if (tree) {
+ if (tag_is_opening(tag))
+ ti = proto_tree_add_text(tree, tvb, offset, tag_len, "{[%u]", *tag_no );
+ else if (tag_is_closing(tag))
+ ti = proto_tree_add_text(tree, tvb, offset, tag_len, "}[%u]", *tag_no );
+ else if (tag_is_context_specific(tag)) {
+ ti = proto_tree_add_text(tree, tvb, offset, tag_len,
+ "Context Tag: %u, Length/Value/Type: %u",
+ *tag_no, *lvt);
+ } else
+ ti = proto_tree_add_text(tree, tvb, offset, tag_len,
+ "Application Tag: %s, Length/Value/Type: %u",
+ val_to_str(*tag_no,
+ BACnetApplicationTagNumber,
+ ASHRAE_Reserved_Fmt),
+ *lvt);
+
+ subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
+ /* details if needed */
+ proto_tree_add_item(subtree, hf_BACnetTagClass, tvb, offset, 1, ENC_BIG_ENDIAN);
+ if (tag_is_extended_tag_number(tag)) {
+ proto_tree_add_uint_format(subtree,
+ hf_BACnetContextTagNumber,
+ tvb, offset, 1, tag,
+ "Extended Tag Number");
+ proto_tree_add_item(subtree,
+ hf_BACnetExtendedTagNumber,
+ tvb, offset + 1, 1, ENC_BIG_ENDIAN);
+ } else {
+ if (tag_is_context_specific(tag))
+ proto_tree_add_item(subtree,
+ hf_BACnetContextTagNumber,
+ tvb, offset, 1, ENC_BIG_ENDIAN);
+ else
+ proto_tree_add_item(subtree,
+ hf_BACnetApplicationTagNumber,
+ tvb, offset, 1, ENC_BIG_ENDIAN);
+ }
+ if (tag_is_closing(tag) || tag_is_opening(tag))
+ proto_tree_add_item(subtree,
+ hf_BACnetNamedTag,
+ tvb, offset, 1, ENC_BIG_ENDIAN);
+ else if (tag_is_extended_value(tag)) {
+ proto_tree_add_item(subtree,
+ hf_BACnetNamedTag,
+ tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_uint(subtree, hf_bacapp_tag_lvt,
+ tvb, lvt_offset, lvt_len, *lvt);
+ } else
+ proto_tree_add_uint(subtree, hf_bacapp_tag_lvt,
+ tvb, lvt_offset, lvt_len, *lvt);
+ }
+
+ return tag_len;
}
static guint
fTagHeader (tvbuff_t *tvb, guint offset, guint8 *tag_no, guint8* tag_info,
- guint32 *lvt)
+ guint32 *lvt)
{
- return fTagHeaderTree (tvb, NULL, offset, tag_no, tag_info, lvt);
+ return fTagHeaderTree (tvb, NULL, offset, tag_no, tag_info, lvt);
}
static guint
fNullTag (tvbuff_t *tvb, proto_tree *tree, guint offset, const gchar *label)
{
- guint8 tag_no, tag_info;
- guint32 lvt;
- proto_item *ti;
- proto_tree *subtree;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ proto_item *ti;
+ proto_tree *subtree;
- ti = proto_tree_add_text(tree, tvb, offset, 1, "%sNULL", label);
- subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
- fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ ti = proto_tree_add_text(tree, tvb, offset, 1, "%sNULL", label);
+ subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
+ fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- return offset + 1;
+ return offset + 1;
}
static guint
fBooleanTag (tvbuff_t *tvb, proto_tree *tree, guint offset, const gchar *label)
{
- guint8 tag_no, tag_info;
- guint32 lvt = 0;
- proto_item *ti;
- proto_tree *subtree;
- guint bool_len = 1;
+ guint8 tag_no, tag_info;
+ guint32 lvt = 0;
+ proto_item *ti;
+ proto_tree *subtree;
+ guint bool_len = 1;
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_info && lvt == 1) {
- lvt = tvb_get_guint8(tvb, offset+1);
- ++bool_len;
- }
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_info && lvt == 1) {
+ lvt = tvb_get_guint8(tvb, offset+1);
+ ++bool_len;
+ }
- ti = proto_tree_add_text(tree, tvb, offset, bool_len,
- "%s%s", label, lvt == 0 ? "FALSE" : "TRUE");
- subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
- fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ ti = proto_tree_add_text(tree, tvb, offset, bool_len,
+ "%s%s", label, lvt == 0 ? "FALSE" : "TRUE");
+ subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
+ fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- return offset + bool_len;
+ return offset + bool_len;
}
static guint
fUnsignedTag (tvbuff_t *tvb, proto_tree *tree, guint offset, const gchar *label)
{
- guint64 val = 0;
- guint8 tag_no, tag_info;
- guint32 lvt;
- guint tag_len;
- proto_item *ti;
- proto_tree *subtree;
+ guint64 val = 0;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ guint tag_len;
+ proto_item *ti;
+ proto_tree *subtree;
- tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- /* only support up to an 8 byte (64-bit) integer */
- if (fUnsigned64 (tvb, offset + tag_len, lvt, &val))
- ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
- "%s(Unsigned) %" G_GINT64_MODIFIER "u", label, val);
- else
- ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
- "%s - %u octets (Unsigned)", label, lvt);
- subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
- fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ /* only support up to an 8 byte (64-bit) integer */
+ if (fUnsigned64 (tvb, offset + tag_len, lvt, &val))
+ ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
+ "%s(Unsigned) %" G_GINT64_MODIFIER "u", label, val);
+ else
+ ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
+ "%s - %u octets (Unsigned)", label, lvt);
+ subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
+ fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- return offset+tag_len+lvt;
+ return offset+tag_len+lvt;
}
static guint
fDevice_Instance (tvbuff_t *tvb, proto_tree *tree, guint offset, int hf)
{
- guint8 tag_no, tag_info;
- guint32 lvt;
- guint tag_len;
- proto_item *ti;
- proto_tree *subtree;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ guint tag_len;
+ proto_item *ti;
+ proto_tree *subtree;
- tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- ti = proto_tree_add_item(tree, hf, tvb, offset+tag_len, lvt, ENC_BIG_ENDIAN);
- subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
- fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ ti = proto_tree_add_item(tree, hf, tvb, offset+tag_len, lvt, ENC_BIG_ENDIAN);
+ subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
+ fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- return offset+tag_len+lvt;
+ return offset+tag_len+lvt;
}
/* set split_val to zero when not needed */
static guint
fEnumeratedTagSplit (tvbuff_t *tvb, proto_tree *tree, guint offset, const gchar *label,
- const value_string *vs, guint32 split_val)
-{
- guint32 val = 0;
- guint8 tag_no, tag_info;
- guint32 lvt;
- guint tag_len;
- proto_item *ti;
- proto_tree *subtree;
-
- tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- /* only support up to a 4 byte (32-bit) enumeration */
- if (fUnsigned32 (tvb, offset+tag_len, lvt, &val)) {
- if (vs)
- ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
- "%s %s", label, val_to_split_str(val, split_val, vs,
- ASHRAE_Reserved_Fmt,Vendor_Proprietary_Fmt));
- else
- ti =proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
- "%s %u", label, val);
- } else {
- ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
- "%s - %u octets (enumeration)", label, lvt);
- }
- subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
- fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
-
- return offset+tag_len+lvt;
+ const value_string *vs, guint32 split_val)
+{
+ guint32 val = 0;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ guint tag_len;
+ proto_item *ti;
+ proto_tree *subtree;
+
+ tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ /* only support up to a 4 byte (32-bit) enumeration */
+ if (fUnsigned32 (tvb, offset+tag_len, lvt, &val)) {
+ if (vs)
+ ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
+ "%s %s", label, val_to_split_str(val, split_val, vs,
+ ASHRAE_Reserved_Fmt,Vendor_Proprietary_Fmt));
+ else
+ ti =proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
+ "%s %u", label, val);
+ } else {
+ ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
+ "%s - %u octets (enumeration)", label, lvt);
+ }
+ subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
+ fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+
+ return offset+tag_len+lvt;
}
static guint
fEnumeratedTag (tvbuff_t *tvb, proto_tree *tree, guint offset, const gchar *label,
- const value_string *vs)
+ const value_string *vs)
{
- return fEnumeratedTagSplit (tvb, tree, offset, label, vs, 0);
+ return fEnumeratedTagSplit (tvb, tree, offset, label, vs, 0);
}
static guint
fSignedTag (tvbuff_t *tvb, proto_tree *tree, guint offset, const gchar *label)
{
- gint64 val = 0;
- guint8 tag_no, tag_info;
- guint32 lvt;
- guint tag_len;
- proto_item *ti;
- proto_tree *subtree;
+ gint64 val = 0;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ guint tag_len;
+ proto_item *ti;
+ proto_tree *subtree;
- tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (fSigned64 (tvb, offset + tag_len, lvt, &val))
- ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
- "%s(Signed) %" G_GINT64_MODIFIER "d", label, val);
- else
- ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
- "%s - %u octets (Signed)", label, lvt);
- subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
- fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (fSigned64 (tvb, offset + tag_len, lvt, &val))
+ ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
+ "%s(Signed) %" G_GINT64_MODIFIER "d", label, val);
+ else
+ ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
+ "%s - %u octets (Signed)", label, lvt);
+ subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
+ fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- return offset+tag_len+lvt;
+ return offset+tag_len+lvt;
}
static guint
fRealTag (tvbuff_t *tvb, proto_tree *tree, guint offset, const gchar *label)
{
- guint8 tag_no, tag_info;
- guint32 lvt;
- guint tag_len;
- gfloat f_val;
- proto_item *ti;
- proto_tree *subtree;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ guint tag_len;
+ gfloat f_val;
+ proto_item *ti;
+ proto_tree *subtree;
- tag_len = fTagHeader(tvb, offset, &tag_no, &tag_info, &lvt);
- f_val = tvb_get_ntohieee_float(tvb, offset+tag_len);
- ti = proto_tree_add_text(tree, tvb, offset, 4+tag_len,
- "%s%f (Real)", label, f_val);
- subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
- fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ tag_len = fTagHeader(tvb, offset, &tag_no, &tag_info, &lvt);
+ f_val = tvb_get_ntohieee_float(tvb, offset+tag_len);
+ ti = proto_tree_add_text(tree, tvb, offset, 4+tag_len,
+ "%s%f (Real)", label, f_val);
+ subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
+ fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- return offset+tag_len+4;
+ return offset+tag_len+4;
}
static guint
fDoubleTag (tvbuff_t *tvb, proto_tree *tree, guint offset, const gchar *label)
{
- guint8 tag_no, tag_info;
- guint32 lvt;
- guint tag_len;
- gdouble d_val;
- proto_item *ti;
- proto_tree *subtree;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ guint tag_len;
+ gdouble d_val;
+ proto_item *ti;
+ proto_tree *subtree;
- tag_len = fTagHeader(tvb, offset, &tag_no, &tag_info, &lvt);
- d_val = tvb_get_ntohieee_double(tvb, offset+tag_len);
- ti = proto_tree_add_text(tree, tvb, offset, 8+tag_len,
- "%s%f (Double)", label, d_val);
- subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
- fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ tag_len = fTagHeader(tvb, offset, &tag_no, &tag_info, &lvt);
+ d_val = tvb_get_ntohieee_double(tvb, offset+tag_len);
+ ti = proto_tree_add_text(tree, tvb, offset, 8+tag_len,
+ "%s%f (Double)", label, d_val);
+ subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
+ fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- return offset+tag_len+8;
+ return offset+tag_len+8;
}
static guint
fProcessId (tvbuff_t *tvb, proto_tree *tree, guint offset)
{
- guint32 val = 0, lvt;
- guint8 tag_no, tag_info;
- proto_item *ti;
- proto_tree *subtree;
- guint tag_len;
+ guint32 val = 0, lvt;
+ guint8 tag_no, tag_info;
+ proto_item *ti;
+ proto_tree *subtree;
+ guint tag_len;
- tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (fUnsigned32 (tvb, offset+tag_len, lvt, &val))
- ti = proto_tree_add_uint(tree, hf_bacapp_tag_ProcessId,
- tvb, offset, lvt+tag_len, val);
- else
- ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
- "Process Identifier - %u octets (Signed)", lvt);
- subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
- fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- offset += tag_len + lvt;
+ tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (fUnsigned32 (tvb, offset+tag_len, lvt, &val))
+ ti = proto_tree_add_uint(tree, hf_bacapp_tag_ProcessId,
+ tvb, offset, lvt+tag_len, val);
+ else
+ ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
+ "Process Identifier - %u octets (Signed)", lvt);
+ subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
+ fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ offset += tag_len + lvt;
- return offset;
+ return offset;
}
static guint
fTimeSpan (tvbuff_t *tvb, proto_tree *tree, guint offset, const gchar *label)
{
- guint32 val = 0, lvt;
- guint8 tag_no, tag_info;
- proto_item *ti;
- proto_tree *subtree;
- guint tag_len;
+ guint32 val = 0, lvt;
+ guint8 tag_no, tag_info;
+ proto_item *ti;
+ proto_tree *subtree;
+ guint tag_len;
- tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (fUnsigned32 (tvb, offset+tag_len, lvt, &val))
- ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
- "%s (hh.mm.ss): %d.%02d.%02d%s",
- label,
- (val / 3600), ((val % 3600) / 60), (val % 60),
- val == 0 ? " (indefinite)" : "");
- else
- ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
- "%s - %u octets (Signed)", label, lvt);
- subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
- fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (fUnsigned32 (tvb, offset+tag_len, lvt, &val))
+ ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
+ "%s (hh.mm.ss): %d.%02d.%02d%s",
+ label,
+ (val / 3600), ((val % 3600) / 60), (val % 60),
+ val == 0 ? " (indefinite)" : "");
+ else
+ ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
+ "%s - %u octets (Signed)", label, lvt);
+ subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
+ fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- return offset+tag_len+lvt;
+ return offset+tag_len+lvt;
}
static guint
fWeekNDay (tvbuff_t *tvb, proto_tree *tree, guint offset)
{
- guint32 month, weekOfMonth, dayOfWeek;
- guint8 tag_no, tag_info;
- guint32 lvt;
- guint tag_len;
- proto_item *ti;
- proto_tree *subtree;
+ guint32 month, weekOfMonth, dayOfWeek;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ guint tag_len;
+ proto_item *ti;
+ proto_tree *subtree;
- tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- month = tvb_get_guint8(tvb, offset+tag_len);
- weekOfMonth = tvb_get_guint8(tvb, offset+tag_len+1);
- dayOfWeek = tvb_get_guint8(tvb, offset+tag_len+2);
- ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len, "%s %s, %s",
- val_to_str(month, months, "month (%d) not found"),
- val_to_str(weekOfMonth, weekofmonth, "week of month (%d) not found"),
- val_to_str(dayOfWeek, day_of_week, "day of week (%d) not found"));
- subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
- fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ month = tvb_get_guint8(tvb, offset+tag_len);
+ weekOfMonth = tvb_get_guint8(tvb, offset+tag_len+1);
+ dayOfWeek = tvb_get_guint8(tvb, offset+tag_len+2);
+ ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len, "%s %s, %s",
+ val_to_str(month, months, "month (%d) not found"),
+ val_to_str(weekOfMonth, weekofmonth, "week of month (%d) not found"),
+ val_to_str(dayOfWeek, day_of_week, "day of week (%d) not found"));
+ subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
+ fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- return offset+tag_len+lvt;
+ return offset+tag_len+lvt;
}
static guint
fDate (tvbuff_t *tvb, proto_tree *tree, guint offset, const gchar *label)
{
- guint32 year, month, day, weekday;
- guint8 tag_no, tag_info;
- guint32 lvt;
- guint tag_len;
- proto_item *ti;
- proto_tree *subtree;
-
- tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- year = tvb_get_guint8(tvb, offset+tag_len);
- month = tvb_get_guint8(tvb, offset+tag_len+1);
- day = tvb_get_guint8(tvb, offset+tag_len+2);
- weekday = tvb_get_guint8(tvb, offset+tag_len+3);
- if ((year == 255) && (day == 255) && (month == 255) && (weekday == 255)) {
- ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
- "%sany", label);
- }
- else if (year != 255) {
- year += 1900;
- ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
- "%s%s %d, %d, (Day of Week = %s)",
- label, val_to_str(month,
- months,
- "month (%d) not found"),
- day, year, val_to_str(weekday,
- day_of_week,
- "(%d) not found"));
- } else {
- ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
- "%s%s %d, any year, (Day of Week = %s)",
- label, val_to_str(month, months, "month (%d) not found"),
- day, val_to_str(weekday, day_of_week, "(%d) not found"));
- }
- subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
- fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
-
- return offset+tag_len+lvt;
+ guint32 year, month, day, weekday;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ guint tag_len;
+ proto_item *ti;
+ proto_tree *subtree;
+
+ tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ year = tvb_get_guint8(tvb, offset+tag_len);
+ month = tvb_get_guint8(tvb, offset+tag_len+1);
+ day = tvb_get_guint8(tvb, offset+tag_len+2);
+ weekday = tvb_get_guint8(tvb, offset+tag_len+3);
+ if ((year == 255) && (day == 255) && (month == 255) && (weekday == 255)) {
+ ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
+ "%sany", label);
+ }
+ else if (year != 255) {
+ year += 1900;
+ ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
+ "%s%s %d, %d, (Day of Week = %s)",
+ label, val_to_str(month,
+ months,
+ "month (%d) not found"),
+ day, year, val_to_str(weekday,
+ day_of_week,
+ "(%d) not found"));
+ } else {
+ ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
+ "%s%s %d, any year, (Day of Week = %s)",
+ label, val_to_str(month, months, "month (%d) not found"),
+ day, val_to_str(weekday, day_of_week, "(%d) not found"));
+ }
+ subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
+ fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+
+ return offset+tag_len+lvt;
}
static guint
fTime (tvbuff_t *tvb, proto_tree *tree, guint offset, const gchar *label)
{
- guint32 hour, minute, second, msec, lvt;
- guint8 tag_no, tag_info;
- guint tag_len;
- proto_item *ti;
- proto_tree *subtree;
-
- tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- hour = tvb_get_guint8(tvb, offset+tag_len);
- minute = tvb_get_guint8(tvb, offset+tag_len+1);
- second = tvb_get_guint8(tvb, offset+tag_len+2);
- msec = tvb_get_guint8(tvb, offset+tag_len+3);
- if ((hour == 255) && (minute == 255) && (second == 255) && (msec == 255))
- ti = proto_tree_add_text(tree, tvb, offset,
- lvt+tag_len, "%sany", label);
- else
- ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
- "%s%d:%02d:%02d.%d %s = %02d:%02d:%02d.%d",
- label,
- hour > 12 ? hour - 12 : hour,
- minute, second, msec,
- hour >= 12 ? "P.M." : "A.M.",
- hour, minute, second, msec);
- subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
- fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
-
- return offset+tag_len+lvt;
+ guint32 hour, minute, second, msec, lvt;
+ guint8 tag_no, tag_info;
+ guint tag_len;
+ proto_item *ti;
+ proto_tree *subtree;
+
+ tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ hour = tvb_get_guint8(tvb, offset+tag_len);
+ minute = tvb_get_guint8(tvb, offset+tag_len+1);
+ second = tvb_get_guint8(tvb, offset+tag_len+2);
+ msec = tvb_get_guint8(tvb, offset+tag_len+3);
+ if ((hour == 255) && (minute == 255) && (second == 255) && (msec == 255))
+ ti = proto_tree_add_text(tree, tvb, offset,
+ lvt+tag_len, "%sany", label);
+ else
+ ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
+ "%s%d:%02d:%02d.%d %s = %02d:%02d:%02d.%d",
+ label,
+ hour > 12 ? hour - 12 : hour,
+ minute, second, msec,
+ hour >= 12 ? "P.M." : "A.M.",
+ hour, minute, second, msec);
+ subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
+ fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+
+ return offset+tag_len+lvt;
}
static guint
fDateTime (tvbuff_t *tvb, proto_tree *tree, guint offset, const gchar *label)
{
- proto_tree *subtree = tree;
- proto_item *tt;
+ proto_tree *subtree = tree;
+ proto_item *tt;
- if (label != NULL) {
- tt = proto_tree_add_text (subtree, tvb, offset, 10, "%s", label);
- subtree = proto_item_add_subtree(tt, ett_bacapp_value);
- }
- offset = fDate (tvb,subtree,offset,"Date: ");
- return fTime (tvb,subtree,offset,"Time: ");
+ if (label != NULL) {
+ tt = proto_tree_add_text (subtree, tvb, offset, 10, "%s", label);
+ subtree = proto_item_add_subtree(tt, ett_bacapp_value);
+ }
+ offset = fDate (tvb,subtree,offset,"Date: ");
+ return fTime (tvb,subtree,offset,"Time: ");
}
static guint
fTimeValue (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0;
- guint8 tag_no, tag_info;
- guint32 lvt;
+ guint lastoffset = 0;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_closing(tag_info)) { /* closing Tag, but not for me */
- return offset;
- }
- offset = fTime (tvb,tree,offset,"Time: ");
- offset = fApplicationTypes(tvb, pinfo, tree, offset, "Value: ");
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_is_closing(tag_info)) { /* closing Tag, but not for me */
+ return offset;
+ }
+ offset = fTime (tvb,tree,offset,"Time: ");
+ offset = fApplicationTypes(tvb, pinfo, tree, offset, "Value: ");
- if (offset==lastoffset) break; /* exit loop if nothing happens inside */
- }
- return offset;
+ if (offset==lastoffset) break; /* exit loop if nothing happens inside */
+ }
+ return offset;
}
static guint
fCalendarEntry (tvbuff_t *tvb, proto_tree *tree, guint offset)
{
- guint8 tag_no, tag_info;
- guint32 lvt;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
- switch (fTagNo(tvb, offset)) {
- case 0: /* Date */
- offset = fDate (tvb, tree, offset, "Date: ");
- break;
- case 1: /* dateRange */
- offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &tag_info, &lvt);
- offset = fDateRange (tvb, tree, offset);
- offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &tag_info, &lvt);
- break;
- case 2: /* BACnetWeekNDay */
- offset = fWeekNDay (tvb, tree, offset);
- break;
- default:
- return offset;
- }
+ switch (fTagNo(tvb, offset)) {
+ case 0: /* Date */
+ offset = fDate (tvb, tree, offset, "Date: ");
+ break;
+ case 1: /* dateRange */
+ offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ offset = fDateRange (tvb, tree, offset);
+ offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ case 2: /* BACnetWeekNDay */
+ offset = fWeekNDay (tvb, tree, offset);
+ break;
+ default:
+ return offset;
+ }
- return offset;
+ return offset;
}
static guint
fEventTimeStamps( tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint offset)
{
- guint32 lvt = 0;
- proto_tree* subtree = tree;
- proto_item* ti = 0;
+ guint32 lvt = 0;
+ proto_tree* subtree = tree;
+ proto_item* ti = 0;
- if (tvb_reported_length_remaining(tvb, offset) > 0) {
- ti = proto_tree_add_text(tree, tvb, offset, lvt, "eventTimeStamps");
- if (ti) {
- subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
- }
- offset = fTimeStamp (tvb, subtree, offset,"TO-OFFNORMAL timestamp: ");
- offset = fTimeStamp (tvb, subtree, offset,"TO-FAULT timestamp: ");
- offset = fTimeStamp (tvb, subtree, offset,"TO-NORMAL timestamp: ");
- }
- return offset;
+ if (tvb_reported_length_remaining(tvb, offset) > 0) {
+ ti = proto_tree_add_text(tree, tvb, offset, lvt, "eventTimeStamps");
+ if (ti) {
+ subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
+ }
+ offset = fTimeStamp (tvb, subtree, offset,"TO-OFFNORMAL timestamp: ");
+ offset = fTimeStamp (tvb, subtree, offset,"TO-FAULT timestamp: ");
+ offset = fTimeStamp (tvb, subtree, offset,"TO-NORMAL timestamp: ");
+ }
+ return offset;
}
static guint
fTimeStamp (tvbuff_t *tvb, proto_tree *tree, guint offset, const gchar *label)
{
- guint8 tag_no = 0, tag_info = 0;
- guint32 lvt = 0;
+ guint8 tag_no = 0, tag_info = 0;
+ guint32 lvt = 0;
- if (tvb_reported_length_remaining(tvb, offset) > 0) { /* don't loop, it's a CHOICE */
- switch (fTagNo(tvb, offset)) {
- case 0: /* time */
- offset = fTime (tvb, tree, offset, label?label:"time: ");
- break;
- case 1: /* sequenceNumber */
- offset = fUnsignedTag (tvb, tree, offset,
- label?label:"sequence number: ");
- break;
- case 2: /* dateTime */
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- offset = fDateTime (tvb, tree, offset, label?label:"date time: ");
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- break;
- default:
- return offset;
- }
- }
+ if (tvb_reported_length_remaining(tvb, offset) > 0) { /* don't loop, it's a CHOICE */
+ switch (fTagNo(tvb, offset)) {
+ case 0: /* time */
+ offset = fTime (tvb, tree, offset, label?label:"time: ");
+ break;
+ case 1: /* sequenceNumber */
+ offset = fUnsignedTag (tvb, tree, offset,
+ label?label:"sequence number: ");
+ break;
+ case 2: /* dateTime */
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ offset = fDateTime (tvb, tree, offset, label?label:"date time: ");
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ default:
+ return offset;
+ }
+ }
- return offset;
+ return offset;
}
static guint
fClientCOV (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- if (tvb_reported_length_remaining(tvb, offset) > 0) {
- offset = fApplicationTypes(tvb,pinfo,tree,offset, "increment: ");
- }
- return offset;
+ if (tvb_reported_length_remaining(tvb, offset) > 0) {
+ offset = fApplicationTypes(tvb,pinfo,tree,offset, "increment: ");
+ }
+ return offset;
}
static const value_string
BACnetDaysOfWeek [] = {
- {0,"Monday" },
- {1,"Tuesday" },
- {2,"Wednesday" },
- {3,"Thursday" },
- {4,"Friday" },
- {5,"Saturday" },
- {6,"Sunday" },
- {0,NULL }
+ { 0, "Monday" },
+ { 1, "Tuesday" },
+ { 2, "Wednesday" },
+ { 3, "Thursday" },
+ { 4, "Friday" },
+ { 5, "Saturday" },
+ { 6, "Sunday" },
+ { 0, NULL }
};
static guint
fDestination (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- if (tvb_reported_length_remaining(tvb, offset) > 0) {
- offset = fApplicationTypesEnumerated(tvb,pinfo,tree,offset,
- "valid Days: ", BACnetDaysOfWeek);
- offset = fTime (tvb,tree,offset,"from time: ");
- offset = fTime (tvb,tree,offset,"to time: ");
- offset = fRecipient (tvb,pinfo,tree,offset);
- offset = fProcessId (tvb,tree,offset);
- offset = fApplicationTypes (tvb,pinfo,tree,offset,
- "issue confirmed notifications: ");
- offset = fBitStringTagVS (tvb,tree,offset,
- "transitions: ", BACnetEventTransitionBits);
- }
- return offset;
+ if (tvb_reported_length_remaining(tvb, offset) > 0) {
+ offset = fApplicationTypesEnumerated(tvb,pinfo,tree,offset,
+ "valid Days: ", BACnetDaysOfWeek);
+ offset = fTime (tvb,tree,offset,"from time: ");
+ offset = fTime (tvb,tree,offset,"to time: ");
+ offset = fRecipient (tvb,pinfo,tree,offset);
+ offset = fProcessId (tvb,tree,offset);
+ offset = fApplicationTypes (tvb,pinfo,tree,offset,
+ "issue confirmed notifications: ");
+ offset = fBitStringTagVS (tvb,tree,offset,
+ "transitions: ", BACnetEventTransitionBits);
+ }
+ return offset;
}
static guint
fOctetString (tvbuff_t *tvb, proto_tree *tree, guint offset, const gchar *label, guint32 lvt)
{
- gchar *tmp;
- guint start = offset;
- guint8 tag_no, tag_info;
- proto_tree* subtree = tree;
- proto_item* ti = 0;
+ gchar *tmp;
+ guint start = offset;
+ guint8 tag_no, tag_info;
+ proto_tree *subtree = tree;
+ proto_item *ti = 0;
- offset += fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ offset += fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (lvt > 0) {
- tmp = tvb_bytes_to_str(tvb, offset, lvt);
- ti = proto_tree_add_text(tree, tvb, offset, lvt, "%s %s", label, tmp);
- offset += lvt;
- }
+ if (lvt > 0) {
+ tmp = tvb_bytes_to_str(tvb, offset, lvt);
+ ti = proto_tree_add_text(tree, tvb, offset, lvt, "%s %s", label, tmp);
+ offset += lvt;
+ }
- if (ti)
- subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
+ if (ti)
+ subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
- fTagHeaderTree(tvb, subtree, start, &tag_no, &tag_info, &lvt);
+ fTagHeaderTree(tvb, subtree, start, &tag_no, &tag_info, &lvt);
- return offset;
+ return offset;
}
static guint
fMacAddress (tvbuff_t *tvb, proto_tree *tree, guint offset, const gchar *label, guint32 lvt)
{
- gchar *tmp;
- guint start = offset;
- guint8 tag_no, tag_info;
- proto_tree* subtree = tree;
- proto_item* ti = 0;
+ gchar *tmp;
+ guint start = offset;
+ guint8 tag_no, tag_info;
+ proto_tree* subtree = tree;
+ proto_item* ti = 0;
- offset += fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ offset += fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- ti = proto_tree_add_text(tree, tvb, offset, 6, "%s", label); /* just add the label, with the tagHeader information in its subtree */
+ ti = proto_tree_add_text(tree, tvb, offset, 6, "%s", label); /* just add the label, with the tagHeader information in its subtree */
- if (lvt > 0) {
- if (lvt == 6) { /* we have 6 Byte IP Address with 4 Octets IPv4 and 2 Octets Port Information */
+ if (lvt > 0) {
+ if (lvt == 6) { /* we have 6 Byte IP Address with 4 Octets IPv4 and 2 Octets Port Information */
- guint32 ip = tvb_get_ipv4(tvb, offset);
- guint16 port = tvb_get_ntohs(tvb, offset+4);
+ guint32 ip = tvb_get_ipv4(tvb, offset);
+ guint16 port = tvb_get_ntohs(tvb, offset+4);
- proto_tree_add_ipv4(tree, hf_bacapp_tag_IPV4, tvb, offset, 4, ip);
- proto_tree_add_uint(tree, hf_bacapp_tag_PORT, tvb, offset+4, 2, port);
+ proto_tree_add_ipv4(tree, hf_bacapp_tag_IPV4, tvb, offset, 4, ip);
+ proto_tree_add_uint(tree, hf_bacapp_tag_PORT, tvb, offset+4, 2, port);
- } else {
- if (lvt == 18) { /* we have 18 Byte IP Address with 16 Octets IPv6 and 2 Octets Port Information */
- struct e_in6_addr addr;
- guint16 port = tvb_get_ntohs(tvb, offset+16);
- tvb_get_ipv6(tvb, offset, &addr);
+ } else {
+ if (lvt == 18) { /* we have 18 Byte IP Address with 16 Octets IPv6 and 2 Octets Port Information */
+ struct e_in6_addr addr;
+ guint16 port = tvb_get_ntohs(tvb, offset+16);
+ tvb_get_ipv6(tvb, offset, &addr);
- proto_tree_add_ipv6(tree, hf_bacapp_tag_IPV6, tvb, offset, 16, (const guint8 *) &addr);
- proto_tree_add_uint(tree, hf_bacapp_tag_PORT, tvb, offset+16, 2, port);
+ proto_tree_add_ipv6(tree, hf_bacapp_tag_IPV6, tvb, offset, 16, (const guint8 *) &addr);
+ proto_tree_add_uint(tree, hf_bacapp_tag_PORT, tvb, offset+16, 2, port);
- } else { /* we have 1 Byte MS/TP Address or anything else interpreted as an address */
- tmp = tvb_bytes_to_str(tvb, offset, lvt);
- ti = proto_tree_add_text(tree, tvb, offset, lvt, "%s", tmp);
- }
- }
- offset += lvt;
- }
+ } else { /* we have 1 Byte MS/TP Address or anything else interpreted as an address */
+ tmp = tvb_bytes_to_str(tvb, offset, lvt);
+ ti = proto_tree_add_text(tree, tvb, offset, lvt, "%s", tmp);
+ }
+ }
+ offset += lvt;
+ }
- if (ti)
- subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
+ if (ti)
+ subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
- fTagHeaderTree(tvb, subtree, start, &tag_no, &tag_info, &lvt);
+ fTagHeaderTree(tvb, subtree, start, &tag_no, &tag_info, &lvt);
- return offset;
+ return offset;
}
static guint
fAddress (tvbuff_t *tvb, proto_tree *tree, guint offset)
{
- guint8 tag_no, tag_info;
- guint32 lvt;
- guint offs;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ guint offs;
- offset = fUnsignedTag (tvb, tree, offset, "network-number");
- offs = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (lvt == 0) {
- proto_tree_add_text(tree, tvb, offset, offs, "MAC-address: broadcast");
- offset += offs;
- } else
- offset = fMacAddress (tvb, tree, offset, "MAC-address: ", lvt);
+ offset = fUnsignedTag (tvb, tree, offset, "network-number");
+ offs = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (lvt == 0) {
+ proto_tree_add_text(tree, tvb, offset, offs, "MAC-address: broadcast");
+ offset += offs;
+ } else
+ offset = fMacAddress (tvb, tree, offset, "MAC-address: ", lvt);
- return offset;
+ return offset;
}
static guint
fSessionKey (tvbuff_t *tvb, proto_tree *tree, guint offset)
{
- offset = fOctetString (tvb,tree,offset,"session key: ", 8);
- return fAddress (tvb,tree,offset);
+ offset = fOctetString (tvb,tree,offset,"session key: ", 8);
+ return fAddress (tvb,tree,offset);
}
static guint
fObjectIdentifier (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint8 tag_no, tag_info;
- guint32 lvt;
- guint tag_length;
- proto_item *ti;
- proto_tree *subtree;
- guint32 object_id;
-
- tag_length = fTagHeader(tvb, offset, &tag_no, &tag_info, &lvt);
- object_id = tvb_get_ntohl(tvb,offset+tag_length);
- object_type = object_id_type(object_id);
- ti = proto_tree_add_text(tree, tvb, offset, tag_length + 4,
- "ObjectIdentifier: %s, %u",
- val_to_split_str(object_type,
- 128,
- BACnetObjectType,
- ASHRAE_Reserved_Fmt,
- Vendor_Proprietary_Fmt),
- object_id_instance(object_id));
- if (col_get_writable(pinfo->cinfo))
- col_append_fstr(pinfo->cinfo, COL_INFO, "%s,%u ",
- val_to_split_str(object_type,
- 128,
- BACnetObjectType,
- ASHRAE_Reserved_Fmt,
- Vendor_Proprietary_Fmt),
- object_id_instance(object_id));
-
- /* update BACnet Statistics */
- updateBacnetInfoValue(BACINFO_OBJECTID,
- ep_strdup(val_to_split_str(object_type, 128,
- BACnetObjectType, ASHRAE_Reserved_Fmt,
- Vendor_Proprietary_Fmt)));
- updateBacnetInfoValue(BACINFO_INSTANCEID, ep_strdup_printf("Instance ID: %u",
- object_id_instance(object_id)));
-
- /* here are the details of how we arrived at the above text */
- subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
- fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- offset += tag_length;
- proto_tree_add_item(subtree, hf_bacapp_objectType, tvb, offset, 4, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_bacapp_instanceNumber, tvb, offset, 4, ENC_BIG_ENDIAN);
- offset += 4;
-
- return offset;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ guint tag_length;
+ proto_item *ti;
+ proto_tree *subtree;
+ guint32 object_id;
+
+ tag_length = fTagHeader(tvb, offset, &tag_no, &tag_info, &lvt);
+ object_id = tvb_get_ntohl(tvb,offset+tag_length);
+ object_type = object_id_type(object_id);
+ ti = proto_tree_add_text(tree, tvb, offset, tag_length + 4,
+ "ObjectIdentifier: %s, %u",
+ val_to_split_str(object_type,
+ 128,
+ BACnetObjectType,
+ ASHRAE_Reserved_Fmt,
+ Vendor_Proprietary_Fmt),
+ object_id_instance(object_id));
+ if (col_get_writable(pinfo->cinfo))
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s,%u ",
+ val_to_split_str(object_type,
+ 128,
+ BACnetObjectType,
+ ASHRAE_Reserved_Fmt,
+ Vendor_Proprietary_Fmt),
+ object_id_instance(object_id));
+
+ /* update BACnet Statistics */
+ updateBacnetInfoValue(BACINFO_OBJECTID,
+ ep_strdup(val_to_split_str(object_type, 128,
+ BACnetObjectType, ASHRAE_Reserved_Fmt,
+ Vendor_Proprietary_Fmt)));
+ updateBacnetInfoValue(BACINFO_INSTANCEID, ep_strdup_printf("Instance ID: %u",
+ object_id_instance(object_id)));
+
+ /* here are the details of how we arrived at the above text */
+ subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
+ fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ offset += tag_length;
+ proto_tree_add_item(subtree, hf_bacapp_objectType, tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_bacapp_instanceNumber, tvb, offset, 4, ENC_BIG_ENDIAN);
+ offset += 4;
+
+ return offset;
}
static guint
fRecipient (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint8 tag_no, tag_info;
- guint32 lvt;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
- fTagHeader(tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_no < 2) {
- if (tag_no == 0) { /* device */
- offset = fObjectIdentifier (tvb, pinfo, tree, offset);
- }
- else { /* address */
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- offset = fAddress (tvb, tree, offset);
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- }
- }
- return offset;
+ fTagHeader(tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_no < 2) {
+ if (tag_no == 0) { /* device */
+ offset = fObjectIdentifier (tvb, pinfo, tree, offset);
+ }
+ else { /* address */
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ offset = fAddress (tvb, tree, offset);
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ }
+ }
+ return offset;
}
static guint
fRecipientProcess (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0;
- guint8 tag_no, tag_info;
- guint32 lvt;
- proto_tree* orgtree = tree;
- proto_item* tt;
- proto_tree* subtree;
-
- /* beginning of new item - indent and label */
- tt = proto_tree_add_text(orgtree, tvb, offset, 1, "Recipient Process" );
- tree = proto_item_add_subtree(tt, ett_bacapp_value);
-
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
-
- switch (fTagNo(tvb, offset)) {
- case 0: /* recipient */
- offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &tag_info, &lvt); /* show context open */
- tt = proto_tree_add_text(tree, tvb, offset, 1, "Recipient"); /* add tree label and indent */
- subtree = proto_item_add_subtree(tt, ett_bacapp_value);
- offset = fRecipient (tvb, pinfo, subtree, offset);
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt); /* show context close */
- break;
- case 1: /* processId */
- offset = fProcessId (tvb, tree, offset);
- lastoffset = offset;
- break;
- default:
- break;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint lastoffset = 0;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ proto_tree *orgtree = tree;
+ proto_item *tt;
+ proto_tree *subtree;
+
+ /* beginning of new item - indent and label */
+ tt = proto_tree_add_text(orgtree, tvb, offset, 1, "Recipient Process" );
+ tree = proto_item_add_subtree(tt, ett_bacapp_value);
+
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+
+ switch (fTagNo(tvb, offset)) {
+ case 0: /* recipient */
+ offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &tag_info, &lvt); /* show context open */
+ tt = proto_tree_add_text(tree, tvb, offset, 1, "Recipient"); /* add tree label and indent */
+ subtree = proto_item_add_subtree(tt, ett_bacapp_value);
+ offset = fRecipient (tvb, pinfo, subtree, offset);
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt); /* show context close */
+ break;
+ case 1: /* processId */
+ offset = fProcessId (tvb, tree, offset);
+ lastoffset = offset;
+ break;
+ default:
+ break;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fCOVSubscription (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0;
- guint8 tag_no, tag_info;
- guint32 lvt;
- proto_tree* subtree;
- proto_item *tt;
- proto_tree* orgtree = tree;
- guint itemno = 1;
-
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_closing(tag_info) ) {
- return offset;
- }
- switch (tag_no) {
-
- case 0: /* recipient */
- /* beginning of new item in list */
- tt = proto_tree_add_text(orgtree, tvb, offset, 1, "Subscription %d",itemno); /* add tree label and indent */
- itemno = itemno + 1;
- tree = proto_item_add_subtree(tt, ett_bacapp_value);
-
- tt = proto_tree_add_text(tree, tvb, offset, 1, "Recipient"); /* add tree label and indent */
- subtree = proto_item_add_subtree(tt, ett_bacapp_value);
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt); /* show context open */
- offset = fRecipientProcess (tvb, pinfo, subtree, offset);
- offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); /* show context close */
- subtree = tree; /* done with this level - return to previous tree */
- break;
- case 1: /* MonitoredPropertyReference */
- tt = proto_tree_add_text(tree, tvb, offset, 1, "Monitored Property Reference");
- subtree = proto_item_add_subtree(tt, ett_bacapp_value);
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- offset = fBACnetObjectPropertyReference (tvb, pinfo, subtree, offset);
- offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- subtree = tree;
- break;
- case 2: /* IssueConfirmedNotifications - boolean */
- offset = fBooleanTag (tvb, tree, offset, "Issue Confirmed Notifications: ");
- break;
- case 3: /* TimeRemaining */
- offset = fUnsignedTag (tvb, tree, offset, "Time Remaining: ");
- break;
- case 4: /* COVIncrement */
- offset = fRealTag (tvb, tree, offset, "COV Increment: ");
- break;
- default:
- break;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint lastoffset = 0;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ proto_tree *subtree;
+ proto_item *tt;
+ proto_tree *orgtree = tree;
+ guint itemno = 1;
+
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_is_closing(tag_info) ) {
+ return offset;
+ }
+ switch (tag_no) {
+
+ case 0: /* recipient */
+ /* beginning of new item in list */
+ tt = proto_tree_add_text(orgtree, tvb, offset, 1, "Subscription %d",itemno); /* add tree label and indent */
+ itemno = itemno + 1;
+ tree = proto_item_add_subtree(tt, ett_bacapp_value);
+
+ tt = proto_tree_add_text(tree, tvb, offset, 1, "Recipient"); /* add tree label and indent */
+ subtree = proto_item_add_subtree(tt, ett_bacapp_value);
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt); /* show context open */
+ offset = fRecipientProcess (tvb, pinfo, subtree, offset);
+ offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); /* show context close */
+ subtree = tree; /* done with this level - return to previous tree */
+ break;
+ case 1: /* MonitoredPropertyReference */
+ tt = proto_tree_add_text(tree, tvb, offset, 1, "Monitored Property Reference");
+ subtree = proto_item_add_subtree(tt, ett_bacapp_value);
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ offset = fBACnetObjectPropertyReference (tvb, pinfo, subtree, offset);
+ offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ subtree = tree;
+ break;
+ case 2: /* IssueConfirmedNotifications - boolean */
+ offset = fBooleanTag (tvb, tree, offset, "Issue Confirmed Notifications: ");
+ break;
+ case 3: /* TimeRemaining */
+ offset = fUnsignedTag (tvb, tree, offset, "Time Remaining: ");
+ break;
+ case 4: /* COVIncrement */
+ offset = fRealTag (tvb, tree, offset, "COV Increment: ");
+ break;
+ default:
+ break;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fAddressBinding (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- offset = fObjectIdentifier (tvb, pinfo, tree, offset);
- return fAddress (tvb, tree, offset);
+ offset = fObjectIdentifier (tvb, pinfo, tree, offset);
+ return fAddress (tvb, tree, offset);
}
static guint
fActionCommand (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset, guint8 tag_match)
{
- guint lastoffset = 0, len;
- guint8 tag_no, tag_info;
- guint32 lvt;
- proto_tree *subtree = tree;
-
- /* set the optional global properties to indicate not-used */
- propertyArrayIndex = -1;
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_closing(tag_info) ) {
- if (tag_no == tag_match) {
- return offset;
- }
- offset += len;
- subtree = tree;
- continue;
- }
- switch (tag_no) {
-
- case 0: /* deviceIdentifier */
- offset = fObjectIdentifier (tvb, pinfo, subtree, offset);
- break;
- case 1: /* objectIdentifier */
- offset = fObjectIdentifier (tvb, pinfo, subtree, offset);
- break;
- case 2: /* propertyIdentifier */
- offset = fPropertyIdentifier (tvb, pinfo, subtree, offset);
- break;
- case 3: /* propertyArrayIndex */
- offset = fPropertyArrayIndex (tvb, subtree, offset);
- break;
- case 4: /* propertyValue */
- offset = fPropertyValue (tvb, pinfo, subtree, offset, tag_info);
- break;
- case 5: /* priority */
- offset = fUnsignedTag (tvb,subtree,offset,"Priority: ");
- break;
- case 6: /* postDelay */
- offset = fUnsignedTag (tvb,subtree,offset,"Post Delay: ");
- break;
- case 7: /* quitOnFailure */
- offset = fBooleanTag(tvb, subtree, offset,
- "Quit On Failure: ");
- break;
- case 8: /* writeSuccessful */
- offset = fBooleanTag(tvb, subtree, offset,
- "Write Successful: ");
- break;
- default:
- return offset;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint lastoffset = 0, len;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ proto_tree *subtree = tree;
+
+ /* set the optional global properties to indicate not-used */
+ propertyArrayIndex = -1;
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_is_closing(tag_info) ) {
+ if (tag_no == tag_match) {
+ return offset;
+ }
+ offset += len;
+ subtree = tree;
+ continue;
+ }
+ switch (tag_no) {
+
+ case 0: /* deviceIdentifier */
+ offset = fObjectIdentifier (tvb, pinfo, subtree, offset);
+ break;
+ case 1: /* objectIdentifier */
+ offset = fObjectIdentifier (tvb, pinfo, subtree, offset);
+ break;
+ case 2: /* propertyIdentifier */
+ offset = fPropertyIdentifier (tvb, pinfo, subtree, offset);
+ break;
+ case 3: /* propertyArrayIndex */
+ offset = fPropertyArrayIndex (tvb, subtree, offset);
+ break;
+ case 4: /* propertyValue */
+ offset = fPropertyValue (tvb, pinfo, subtree, offset, tag_info);
+ break;
+ case 5: /* priority */
+ offset = fUnsignedTag (tvb,subtree,offset,"Priority: ");
+ break;
+ case 6: /* postDelay */
+ offset = fUnsignedTag (tvb,subtree,offset,"Post Delay: ");
+ break;
+ case 7: /* quitOnFailure */
+ offset = fBooleanTag(tvb, subtree, offset,
+ "Quit On Failure: ");
+ break;
+ case 8: /* writeSuccessful */
+ offset = fBooleanTag(tvb, subtree, offset,
+ "Write Successful: ");
+ break;
+ default:
+ return offset;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
/* BACnetActionList ::= SEQUENCE{
@@ -5753,511 +5753,509 @@ fActionCommand (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offse
static guint
fActionList (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0, len;
- guint8 tag_no, tag_info;
- guint32 lvt;
- proto_tree *subtree = tree;
- proto_item *ti;
-
- while (tvb_reported_length_remaining(tvb, offset)) {
- lastoffset = offset;
- len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_closing(tag_info)) {
- subtree = tree;
- if ( tag_no != 0 ) /* don't eat the closing property tag, just return */
- return offset;
- offset += len;
- continue;
- }
- if (tag_is_opening(tag_info)) {
- ti = proto_tree_add_text(tree, tvb, offset, 1, "Action List");
- subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
- offset += fTagHeaderTree (tvb, subtree, offset,
- &tag_no, &tag_info, &lvt);
- }
- switch (tag_no) {
- case 0: /* BACnetActionCommand */
- offset = fActionCommand (tvb, pinfo, subtree, offset, tag_no);
- break;
- default:
- break;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint lastoffset = 0, len;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ proto_tree *subtree = tree;
+ proto_item *ti;
+
+ while (tvb_reported_length_remaining(tvb, offset) > 0) {
+ lastoffset = offset;
+ len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_is_closing(tag_info)) {
+ subtree = tree;
+ if ( tag_no != 0 ) /* don't eat the closing property tag, just return */
+ return offset;
+ offset += len;
+ continue;
+ }
+ if (tag_is_opening(tag_info)) {
+ ti = proto_tree_add_text(tree, tvb, offset, 1, "Action List");
+ subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
+ offset += fTagHeaderTree (tvb, subtree, offset,
+ &tag_no, &tag_info, &lvt);
+ }
+ switch (tag_no) {
+ case 0: /* BACnetActionCommand */
+ offset = fActionCommand (tvb, pinfo, subtree, offset, tag_no);
+ break;
+ default:
+ break;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fPropertyIdentifier (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint8 tag_no, tag_info;
- guint32 lvt;
- guint tag_len;
- proto_item *ti;
- proto_tree *subtree;
- const gchar *label = "Property Identifier";
-
- propertyIdentifier = 0; /* global Variable */
- tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- /* can we decode this value? */
- if (fUnsigned32 (tvb, offset+tag_len, lvt, (guint32 *)&propertyIdentifier)) {
- ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
- "%s: %s (%u)", label,
- val_to_split_str(propertyIdentifier, 512,
- BACnetPropertyIdentifier,
- ASHRAE_Reserved_Fmt,
- Vendor_Proprietary_Fmt), propertyIdentifier);
- if (col_get_writable(pinfo->cinfo))
- col_append_fstr(pinfo->cinfo, COL_INFO, "%s ",
- val_to_split_str(propertyIdentifier, 512,
- BACnetPropertyIdentifier,
- ASHRAE_Reserved_Fmt,
- Vendor_Proprietary_Fmt));
- } else {
- /* property identifiers cannot be larger than 22-bits */
- return offset;
- }
- subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
- fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- proto_tree_add_item(subtree, hf_BACnetPropertyIdentifier, tvb,
- offset+tag_len, lvt, ENC_BIG_ENDIAN);
-
- return offset+tag_len+lvt;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ guint tag_len;
+ proto_item *ti;
+ proto_tree *subtree;
+ const gchar *label = "Property Identifier";
+
+ propertyIdentifier = 0; /* global Variable */
+ tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ /* can we decode this value? */
+ if (fUnsigned32 (tvb, offset+tag_len, lvt, (guint32 *)&propertyIdentifier)) {
+ ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
+ "%s: %s (%u)", label,
+ val_to_split_str(propertyIdentifier, 512,
+ BACnetPropertyIdentifier,
+ ASHRAE_Reserved_Fmt,
+ Vendor_Proprietary_Fmt), propertyIdentifier);
+ if (col_get_writable(pinfo->cinfo))
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ",
+ val_to_split_str(propertyIdentifier, 512,
+ BACnetPropertyIdentifier,
+ ASHRAE_Reserved_Fmt,
+ Vendor_Proprietary_Fmt));
+ } else {
+ /* property identifiers cannot be larger than 22-bits */
+ return offset;
+ }
+ subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
+ fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ proto_tree_add_item(subtree, hf_BACnetPropertyIdentifier, tvb,
+ offset+tag_len, lvt, ENC_BIG_ENDIAN);
+
+ return offset+tag_len+lvt;
}
static guint
fPropertyArrayIndex (tvbuff_t *tvb, proto_tree *tree, guint offset)
{
- guint8 tag_no, tag_info;
- guint32 lvt;
- guint tag_len;
- proto_item *ti;
- proto_tree *subtree;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ guint tag_len;
+ proto_item *ti;
+ proto_tree *subtree;
- tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (fUnsigned32 (tvb, offset + tag_len, lvt, (guint32 *)&propertyArrayIndex))
- ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
- "property Array Index (Unsigned) %u", propertyArrayIndex);
- else
- ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
- "property Array Index - %u octets (Unsigned)", lvt);
- subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
- fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (fUnsigned32 (tvb, offset + tag_len, lvt, (guint32 *)&propertyArrayIndex))
+ ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
+ "property Array Index (Unsigned) %u", propertyArrayIndex);
+ else
+ ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
+ "property Array Index - %u octets (Unsigned)", lvt);
+ subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
+ fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- return offset+tag_len+lvt;
+ return offset+tag_len+lvt;
}
static guint
fCharacterString (tvbuff_t *tvb, proto_tree *tree, guint offset, const gchar *label)
{
- guint8 tag_no, tag_info, character_set;
- guint32 lvt, l;
- gsize inbytesleft, outbytesleft = 512;
- guint offs, extra = 1;
- guint8 *str_val;
- const char *coding;
- guint8 bf_arr[512], *out = &bf_arr[0];
- proto_item *ti;
- proto_tree *subtree;
- guint start = offset;
-
- if (tvb_reported_length_remaining(tvb, offset) > 0) {
-
- offs = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
-
- character_set = tvb_get_guint8(tvb, offset+offs);
- /* Account for code page if DBCS */
- if (character_set == 1) {
- extra = 3;
- }
- offset += (offs+extra);
- lvt -= (extra);
-
- do {
- inbytesleft = l = MIN(lvt, 255);
- /*
- * XXX - are we guaranteed that these encoding
- * names correspond, on *all* platforms with
- * iconv(), to the encodings we want?
- * If not (and perhaps even if so), we should
- * perhaps have our own iconv() implementation,
- * with a different name, so that we control the
- * encodings it supports and the names of those
- * encodings.
- *
- * We should also handle that in the general
- * string handling code, rather than making it
- * specific to the BACAPP dissector, as many
- * other dissectors need to handle various
- * character encodings.
- */
- str_val = tvb_get_ephemeral_string(tvb, offset, l);
- /** this decoding may be not correct for multi-byte characters, Lka */
- switch (character_set) {
- case ANSI_X34:
- fConvertXXXtoUTF8(str_val, &inbytesleft, out, &outbytesleft, "UTF-8");
- coding = "UTF-8";
- break;
- case IBM_MS_DBCS:
- out = str_val;
- coding = "IBM MS DBCS";
- break;
- case JIS_C_6226:
- out = str_val;
- coding = "JIS C 6226";
- break;
- case ISO_10646_UCS4:
- fConvertXXXtoUTF8(str_val, &inbytesleft, out, &outbytesleft, "UCS-4BE");
- coding = "ISO 10646 UCS-4";
- break;
- case ISO_10646_UCS2:
- fConvertXXXtoUTF8(str_val, &inbytesleft, out, &outbytesleft, "UCS-2BE");
- coding = "ISO 10646 UCS-2";
- break;
- case ISO_18859_1:
- fConvertXXXtoUTF8(str_val, &inbytesleft, out, &outbytesleft, "ISO8859-1");
- coding = "ISO 8859-1";
- break;
- default:
- out = str_val;
- coding = "unknown";
- break;
- }
- ti = proto_tree_add_text(tree, tvb, offset, l, "%s%s '%s'", label, coding, out);
- lvt-=l;
- offset+=l;
- } while (lvt > 0);
-
- subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
-
- fTagHeaderTree (tvb, subtree, start, &tag_no, &tag_info, &lvt);
- proto_tree_add_item(subtree, hf_BACnetCharacterSet, tvb, start+offs, 1, ENC_BIG_ENDIAN);
-
- if (character_set == 1) {
- proto_tree_add_text(subtree, tvb, start+offs+1, 2, "Code Page: %d", tvb_get_ntohs(tvb, start+offs+1));
- }
- /* XXX - put the string value here */
- }
- return offset;
+ guint8 tag_no, tag_info, character_set;
+ guint32 lvt, l;
+ gsize inbytesleft, outbytesleft = 512;
+ guint offs, extra = 1;
+ guint8 *str_val;
+ const char *coding;
+ guint8 bf_arr[512], *out = &bf_arr[0];
+ proto_item *ti;
+ proto_tree *subtree;
+ guint start = offset;
+
+ if (tvb_reported_length_remaining(tvb, offset) > 0) {
+
+ offs = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+
+ character_set = tvb_get_guint8(tvb, offset+offs);
+ /* Account for code page if DBCS */
+ if (character_set == 1) {
+ extra = 3;
+ }
+ offset += (offs+extra);
+ lvt -= (extra);
+
+ do {
+ inbytesleft = l = MIN(lvt, 255);
+ /*
+ * XXX - are we guaranteed that these encoding
+ * names correspond, on *all* platforms with
+ * iconv(), to the encodings we want?
+ * If not (and perhaps even if so), we should
+ * perhaps have our own iconv() implementation,
+ * with a different name, so that we control the
+ * encodings it supports and the names of those
+ * encodings.
+ *
+ * We should also handle that in the general
+ * string handling code, rather than making it
+ * specific to the BACAPP dissector, as many
+ * other dissectors need to handle various
+ * character encodings.
+ */
+ str_val = tvb_get_ephemeral_string(tvb, offset, l);
+ /** this decoding may be not correct for multi-byte characters, Lka */
+ switch (character_set) {
+ case ANSI_X34:
+ fConvertXXXtoUTF8(str_val, &inbytesleft, out, &outbytesleft, "UTF-8");
+ coding = "UTF-8";
+ break;
+ case IBM_MS_DBCS:
+ out = str_val;
+ coding = "IBM MS DBCS";
+ break;
+ case JIS_C_6226:
+ out = str_val;
+ coding = "JIS C 6226";
+ break;
+ case ISO_10646_UCS4:
+ fConvertXXXtoUTF8(str_val, &inbytesleft, out, &outbytesleft, "UCS-4BE");
+ coding = "ISO 10646 UCS-4";
+ break;
+ case ISO_10646_UCS2:
+ fConvertXXXtoUTF8(str_val, &inbytesleft, out, &outbytesleft, "UCS-2BE");
+ coding = "ISO 10646 UCS-2";
+ break;
+ case ISO_18859_1:
+ fConvertXXXtoUTF8(str_val, &inbytesleft, out, &outbytesleft, "ISO8859-1");
+ coding = "ISO 8859-1";
+ break;
+ default:
+ out = str_val;
+ coding = "unknown";
+ break;
+ }
+ ti = proto_tree_add_text(tree, tvb, offset, l, "%s%s '%s'", label, coding, out);
+ lvt -= l;
+ offset += l;
+ } while (lvt > 0);
+
+ subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
+
+ fTagHeaderTree (tvb, subtree, start, &tag_no, &tag_info, &lvt);
+ proto_tree_add_item(subtree, hf_BACnetCharacterSet, tvb, start+offs, 1, ENC_BIG_ENDIAN);
+
+ if (character_set == 1) {
+ proto_tree_add_text(subtree, tvb, start+offs+1, 2, "Code Page: %d", tvb_get_ntohs(tvb, start+offs+1));
+ }
+ /* XXX - put the string value here */
+ }
+ return offset;
}
static guint
fBitStringTagVS (tvbuff_t *tvb, proto_tree *tree, guint offset, const gchar *label,
- const value_string *src)
-{
- guint8 tag_no, tag_info, tmp;
- gint j, unused, skip;
- guint start = offset;
- guint offs;
- guint32 lvt, i, numberOfBytes;
- guint8 bf_arr[256];
- proto_tree* subtree = tree;
- proto_item* ti = 0;
-
- offs = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- numberOfBytes = lvt-1; /* Ignore byte for unused bit count */
- offset+=offs;
- unused = tvb_get_guint8(tvb, offset); /* get the unused Bits */
- ti = proto_tree_add_text(tree, tvb, start, offs+lvt,
- "%s(Bit String)",
- label);
- if (ti) {
- subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
- }
- fTagHeaderTree(tvb, subtree, start, &tag_no, &tag_info, &lvt);
- proto_tree_add_text(subtree, tvb, offset, 1,
- "Unused bits: %u",
- unused);
- skip = 0;
- for (i = 0; i < numberOfBytes; i++) {
- tmp = tvb_get_guint8(tvb, (offset)+i+1);
- if (i == numberOfBytes-1) { skip = unused; }
- for (j = 0; j < 8-skip; j++) {
- if (src != NULL) {
- if (tmp & (1 << (7 - j)))
- proto_tree_add_text(subtree, tvb,
- offset+i+1, 1,
- "%s = TRUE",
- val_to_str((guint) (i*8 +j),
- src,
- ASHRAE_Reserved_Fmt));
- else
- proto_tree_add_text(subtree, tvb,
- offset+i+1, 1,
- "%s = FALSE",
- val_to_str((guint) (i*8 +j),
- src,
- ASHRAE_Reserved_Fmt));
- } else {
- bf_arr[MIN(255,(i*8)+j)] = tmp & (1 << (7 - j)) ? '1' : '0';
- }
- }
- }
-
- if (src == NULL) {
- bf_arr[MIN(255,numberOfBytes*8-unused)] = 0;
- proto_tree_add_text(subtree, tvb, offset, lvt, "B'%s'", bf_arr);
- }
-
- offset+=lvt;
-
- return offset;
+ const value_string *src)
+{
+ guint8 tag_no, tag_info, tmp;
+ gint j, unused, skip;
+ guint start = offset;
+ guint offs;
+ guint32 lvt, i, numberOfBytes;
+ guint8 bf_arr[256];
+ proto_tree* subtree = tree;
+ proto_item* ti = 0;
+
+ offs = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ numberOfBytes = lvt-1; /* Ignore byte for unused bit count */
+ offset += offs;
+ unused = tvb_get_guint8(tvb, offset); /* get the unused Bits */
+ ti = proto_tree_add_text(tree, tvb, start, offs+lvt,
+ "%s(Bit String)", label);
+ if (ti) {
+ subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
+ }
+ fTagHeaderTree(tvb, subtree, start, &tag_no, &tag_info, &lvt);
+ proto_tree_add_text(subtree, tvb, offset, 1,
+ "Unused bits: %u", unused);
+ skip = 0;
+ for (i = 0; i < numberOfBytes; i++) {
+ tmp = tvb_get_guint8(tvb, (offset)+i+1);
+ if (i == numberOfBytes-1) { skip = unused; }
+ for (j = 0; j < 8-skip; j++) {
+ if (src != NULL) {
+ if (tmp & (1 << (7 - j)))
+ proto_tree_add_text(subtree, tvb,
+ offset+i+1, 1,
+ "%s = TRUE",
+ val_to_str((guint) (i*8 +j),
+ src,
+ ASHRAE_Reserved_Fmt));
+ else
+ proto_tree_add_text(subtree, tvb,
+ offset+i+1, 1,
+ "%s = FALSE",
+ val_to_str((guint) (i*8 +j),
+ src,
+ ASHRAE_Reserved_Fmt));
+ } else {
+ bf_arr[MIN(255,(i*8)+j)] = tmp & (1 << (7 - j)) ? '1' : '0';
+ }
+ }
+ }
+
+ if (src == NULL) {
+ bf_arr[MIN(255,numberOfBytes*8-unused)] = 0;
+ proto_tree_add_text(subtree, tvb, offset, lvt, "B'%s'", bf_arr);
+ }
+
+ offset += lvt;
+
+ return offset;
}
static guint
fBitStringTag (tvbuff_t *tvb, proto_tree *tree, guint offset, const gchar *label)
{
- return fBitStringTagVS (tvb, tree, offset, label, NULL);
+ return fBitStringTagVS (tvb, tree, offset, label, NULL);
}
/* handles generic application types, as well as enumerated and enumerations
with reserved and proprietarty ranges (split) */
static guint
fApplicationTypesEnumeratedSplit (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset,
- const gchar *label, const value_string *src, guint32 split_val)
-{
- guint8 tag_no, tag_info;
- guint32 lvt;
- guint tag_len;
-
- if (tvb_reported_length_remaining(tvb, offset) > 0) {
-
- tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (!tag_is_context_specific(tag_info)) {
- switch (tag_no) {
- case 0: /** NULL 20.2.2 */
- offset = fNullTag(tvb, tree, offset, label);
- break;
- case 1: /** BOOLEAN 20.2.3 */
- offset = fBooleanTag(tvb, tree, offset, label);
- break;
- case 2: /** Unsigned Integer 20.2.4 */
- offset = fUnsignedTag(tvb, tree, offset, label);
- break;
- case 3: /** Signed Integer 20.2.5 */
- offset = fSignedTag(tvb, tree, offset, label);
- break;
- case 4: /** Real 20.2.6 */
- offset = fRealTag(tvb, tree, offset, label);
- break;
- case 5: /** Double 20.2.7 */
- offset = fDoubleTag(tvb, tree, offset, label);
- break;
- case 6: /** Octet String 20.2.8 */
- offset = fOctetString (tvb, tree, offset, label, lvt);
- break;
- case 7: /** Character String 20.2.9 */
- offset = fCharacterString (tvb,tree,offset,label);
- break;
- case 8: /** Bit String 20.2.10 */
- offset = fBitStringTagVS (tvb, tree, offset, label, src);
- break;
- case 9: /** Enumerated 20.2.11 */
- offset = fEnumeratedTagSplit (tvb, tree, offset, label, src, split_val);
- break;
- case 10: /** Date 20.2.12 */
- offset = fDate (tvb, tree, offset, label);
- break;
- case 11: /** Time 20.2.13 */
- offset = fTime (tvb, tree, offset, label);
- break;
- case 12: /** BACnetObjectIdentifier 20.2.14 */
- offset = fObjectIdentifier (tvb, pinfo, tree, offset);
- break;
- case 13: /* reserved for ASHRAE */
- case 14:
- case 15:
- proto_tree_add_text(tree, tvb, offset, lvt+tag_len, "%s'reserved for ASHRAE'", label);
- offset+=lvt+tag_len;
- break;
- default:
- break;
- }
-
- }
- }
- return offset;
+ const gchar *label, const value_string *src, guint32 split_val)
+{
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ guint tag_len;
+
+ if (tvb_reported_length_remaining(tvb, offset) > 0) {
+
+ tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (!tag_is_context_specific(tag_info)) {
+ switch (tag_no) {
+ case 0: /** NULL 20.2.2 */
+ offset = fNullTag(tvb, tree, offset, label);
+ break;
+ case 1: /** BOOLEAN 20.2.3 */
+ offset = fBooleanTag(tvb, tree, offset, label);
+ break;
+ case 2: /** Unsigned Integer 20.2.4 */
+ offset = fUnsignedTag(tvb, tree, offset, label);
+ break;
+ case 3: /** Signed Integer 20.2.5 */
+ offset = fSignedTag(tvb, tree, offset, label);
+ break;
+ case 4: /** Real 20.2.6 */
+ offset = fRealTag(tvb, tree, offset, label);
+ break;
+ case 5: /** Double 20.2.7 */
+ offset = fDoubleTag(tvb, tree, offset, label);
+ break;
+ case 6: /** Octet String 20.2.8 */
+ offset = fOctetString (tvb, tree, offset, label, lvt);
+ break;
+ case 7: /** Character String 20.2.9 */
+ offset = fCharacterString (tvb,tree,offset,label);
+ break;
+ case 8: /** Bit String 20.2.10 */
+ offset = fBitStringTagVS (tvb, tree, offset, label, src);
+ break;
+ case 9: /** Enumerated 20.2.11 */
+ offset = fEnumeratedTagSplit (tvb, tree, offset, label, src, split_val);
+ break;
+ case 10: /** Date 20.2.12 */
+ offset = fDate (tvb, tree, offset, label);
+ break;
+ case 11: /** Time 20.2.13 */
+ offset = fTime (tvb, tree, offset, label);
+ break;
+ case 12: /** BACnetObjectIdentifier 20.2.14 */
+ offset = fObjectIdentifier (tvb, pinfo, tree, offset);
+ break;
+ case 13: /* reserved for ASHRAE */
+ case 14:
+ case 15:
+ proto_tree_add_text(tree, tvb, offset, lvt+tag_len, "%s'reserved for ASHRAE'", label);
+ offset += lvt + tag_len;
+ break;
+ default:
+ break;
+ }
+
+ }
+ }
+ return offset;
}
static guint
fShedLevel (tvbuff_t *tvb, proto_tree *tree, guint offset)
{
- guint lastoffset = 0;
+ guint lastoffset = 0;
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
- switch (fTagNo(tvb,offset)) {
- case 0: /* percent */
- offset = fUnsignedTag (tvb, tree, offset, "shed percent: ");
- break;
- case 1: /* level */
- offset = fUnsignedTag (tvb, tree, offset, "shed level: ");
- break;
- case 2: /* amount */
- offset = fRealTag(tvb, tree, offset, "shed amount: ");
- break;
- default:
- return offset;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ switch (fTagNo(tvb,offset)) {
+ case 0: /* percent */
+ offset = fUnsignedTag (tvb, tree, offset, "shed percent: ");
+ break;
+ case 1: /* level */
+ offset = fUnsignedTag (tvb, tree, offset, "shed level: ");
+ break;
+ case 2: /* amount */
+ offset = fRealTag(tvb, tree, offset, "shed amount: ");
+ break;
+ default:
+ return offset;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fApplicationTypesEnumerated (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset,
- const gchar *label, const value_string *vs)
+ const gchar *label, const value_string *vs)
{
- return fApplicationTypesEnumeratedSplit(tvb, pinfo, tree, offset, label, vs, 0);
+ return fApplicationTypesEnumeratedSplit(tvb, pinfo, tree, offset, label, vs, 0);
}
static guint
fApplicationTypes (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset,
- const gchar *label)
+ const gchar *label)
{
- return fApplicationTypesEnumeratedSplit(tvb, pinfo, tree, offset, label, NULL, 0);
+ return fApplicationTypesEnumeratedSplit(tvb, pinfo, tree, offset, label, NULL, 0);
}
static guint
fContextTaggedValue(tvbuff_t *tvb, proto_tree *tree, guint offset, const gchar *label)
{
- guint8 tag_no, tag_info;
- guint32 lvt;
- guint tag_len;
- proto_item *ti;
- proto_tree *subtree;
- gint tvb_len;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ guint tag_len;
+ proto_item *ti;
+ proto_tree *subtree;
+ gint tvb_len;
- (void)label;
- tag_len = fTagHeader(tvb, offset, &tag_no, &tag_info, &lvt);
- /* cap the the suggested length in case of bad data */
- tvb_len = tvb_reported_length_remaining(tvb, offset+tag_len);
- if ((tvb_len >= 0) && ((guint32)tvb_len < lvt)) {
- lvt = tvb_len;
- }
- ti = proto_tree_add_text(tree, tvb, offset+tag_len, lvt,
- "Context Value (as %u DATA octets)", lvt);
+ (void)label;
+ tag_len = fTagHeader(tvb, offset, &tag_no, &tag_info, &lvt);
+ /* cap the the suggested length in case of bad data */
+ tvb_len = tvb_reported_length_remaining(tvb, offset+tag_len);
+ if ((tvb_len >= 0) && ((guint32)tvb_len < lvt)) {
+ lvt = tvb_len;
+ }
+ ti = proto_tree_add_text(tree, tvb, offset+tag_len, lvt,
+ "Context Value (as %u DATA octets)", lvt);
- subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
- fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
+ fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- return offset + tag_len + lvt;
+ return offset + tag_len + lvt;
}
/*
BACnetPrescale ::= SEQUENCE {
- multiplier [0] Unsigned,
-moduloDivide [1] Unsigned
+ multiplier [0] Unsigned,
+moduloDivide [1] Unsigned
}
*/
static guint
fPrescale (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint offset)
{
- guint8 tag_no, tag_info;
- guint32 lvt;
- guint lastoffset = 0;
-
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_closing(tag_info) ) {
- return offset;
- }
- switch (tag_no) {
- case 0: /* multiplier */
- offset = fUnsignedTag (tvb,tree,offset,"Multiplier: ");
- break;
- case 1: /* moduloDivide */
- offset = fUnsignedTag (tvb,tree,offset,"Modulo Divide: ");
- break;
- default:
- return offset;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ guint lastoffset = 0;
+
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_is_closing(tag_info) ) {
+ return offset;
+ }
+ switch (tag_no) {
+ case 0: /* multiplier */
+ offset = fUnsignedTag (tvb,tree,offset,"Multiplier: ");
+ break;
+ case 1: /* moduloDivide */
+ offset = fUnsignedTag (tvb,tree,offset,"Modulo Divide: ");
+ break;
+ default:
+ return offset;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
/*
BACnetScale ::= CHOICE {
- floatScale [0] REAL,
-integerScale [1] INTEGER
+ floatScale [0] REAL,
+integerScale [1] INTEGER
}
*/
static guint
fScale (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint offset)
{
- guint8 tag_no, tag_info;
- guint32 lvt;
- guint lastoffset = 0;
-
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_closing(tag_info) ) {
- return offset;
- }
- switch (tag_no) {
- case 0: /* floatScale */
- offset = fRealTag (tvb,tree,offset,"Float Scale: ");
- break;
- case 1: /* integerScale */
- offset = fSignedTag (tvb,tree,offset,"Integer Scale: ");
- break;
- default:
- return offset;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ guint lastoffset = 0;
+
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_is_closing(tag_info) ) {
+ return offset;
+ }
+ switch (tag_no) {
+ case 0: /* floatScale */
+ offset = fRealTag (tvb,tree,offset,"Float Scale: ");
+ break;
+ case 1: /* integerScale */
+ offset = fSignedTag (tvb,tree,offset,"Integer Scale: ");
+ break;
+ default:
+ return offset;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
/*
BACnetAccumulatorRecord ::= SEQUENCE {
- timestamp [0] BACnetDateTime,
- presentValue [1] Unsigned,
- accumulatedValue [2] Unsigned,
- accumulatortStatus [3] ENUMERATED {
- normal (0),
- starting (1),
- recovered (2),
- abnormal (3),
- failed (4)
- }
+ timestamp [0] BACnetDateTime,
+ presentValue [1] Unsigned,
+ accumulatedValue [2] Unsigned,
+ accumulatortStatus [3] ENUMERATED {
+ normal (0),
+ starting (1),
+ recovered (2),
+ abnormal (3),
+ failed (4)
+ }
}
*/
static guint
fLoggingRecord (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint offset)
{
- guint8 tag_no, tag_info;
- guint32 lvt;
- guint lastoffset = 0;
-
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_closing(tag_info) ) {
- return offset;
- }
- switch (tag_no) {
- case 0: /* timestamp */
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- offset = fDateTime (tvb, tree, offset, "Timestamp: ");
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- break;
- case 1: /* presentValue */
- offset = fUnsignedTag (tvb,tree,offset,"Present Value: ");
- break;
- case 2: /* accumulatedValue */
- offset = fUnsignedTag (tvb,tree,offset,"Accumulated Value: ");
- break;
- case 3: /* accumulatorStatus */
- offset = fEnumeratedTag (tvb, tree, offset, "Accumulator Status: ", BACnetAccumulatorStatus);
- default:
- return offset;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ guint lastoffset = 0;
+
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_is_closing(tag_info) ) {
+ return offset;
+ }
+ switch (tag_no) {
+ case 0: /* timestamp */
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ offset = fDateTime (tvb, tree, offset, "Timestamp: ");
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ case 1: /* presentValue */
+ offset = fUnsignedTag (tvb,tree,offset,"Present Value: ");
+ break;
+ case 2: /* accumulatedValue */
+ offset = fUnsignedTag (tvb,tree,offset,"Accumulated Value: ");
+ break;
+ case 3: /* accumulatorStatus */
+ offset = fEnumeratedTag (tvb, tree, offset, "Accumulator Status: ", BACnetAccumulatorStatus);
+ default:
+ return offset;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
/*
@@ -6266,20 +6264,20 @@ fLoggingRecord (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint
static guint
fSequenceOfEnums (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset, const gchar *label, const value_string *vs)
{
- guint8 tag_no, tag_info;
- guint32 lvt;
- guint lastoffset = 0;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ guint lastoffset = 0;
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_closing(tag_info) ) {
- return offset;
- }
- offset = fApplicationTypesEnumerated(tvb, pinfo, tree, offset, label, vs);
- if ( offset == lastoffset ) break;
- }
- return offset;
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_is_closing(tag_info) ) {
+ return offset;
+ }
+ offset = fApplicationTypesEnumerated(tvb, pinfo, tree, offset, label, vs);
+ if ( offset == lastoffset ) break;
+ }
+ return offset;
}
/*
@@ -6289,20 +6287,20 @@ SEQ OF BACnetDeviceObjectReference (accessed as an array)
static guint
fDoorMembers (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint8 tag_no, tag_info;
- guint32 lvt;
- guint lastoffset = 0;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ guint lastoffset = 0;
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_closing(tag_info) ) {
- return offset;
- }
- offset = fDeviceObjectReference(tvb, pinfo, tree, offset);
- if (offset == lastoffset) break;
- }
- return offset;
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_is_closing(tag_info) ) {
+ return offset;
+ }
+ offset = fDeviceObjectReference(tvb, pinfo, tree, offset);
+ if (offset == lastoffset) break;
+ }
+ return offset;
}
/*
@@ -6311,842 +6309,841 @@ SEQ OF ReadAccessSpecification
static guint
fListOfGroupMembers (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint8 tag_no, tag_info;
- guint32 lvt;
- guint lastoffset = 0;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ guint lastoffset = 0;
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_closing(tag_info) ) {
- return offset;
- }
- offset = fReadAccessSpecification(tvb, pinfo, tree, offset);
- if ( offset == lastoffset ) break;
- }
- return offset;
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_is_closing(tag_info) ) {
+ return offset;
+ }
+ offset = fReadAccessSpecification(tvb, pinfo, tree, offset);
+ if ( offset == lastoffset ) break;
+ }
+ return offset;
}
static guint
fAbstractSyntaxNType (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint8 tag_no, tag_info;
- guint32 lvt;
- guint lastoffset = 0, depth = 0;
- char ar[256];
- guint32 save_object_type = object_type;
-
- if (propertyIdentifier >= 0) {
- g_snprintf (ar, sizeof(ar), "%s: ",
- val_to_split_str(propertyIdentifier, 512,
- BACnetPropertyIdentifier,
- ASHRAE_Reserved_Fmt,
- Vendor_Proprietary_Fmt));
- } else {
- g_snprintf (ar, sizeof(ar), "Abstract Type: ");
- }
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_closing(tag_info)) { /* closing tag, but not for me */
- if (depth <= 0) return offset;
- }
-
- /* Application Tags */
- switch (propertyIdentifier) {
- case 2: /* action */
- /* loop object is application tagged,
- command object is context tagged */
- if (tag_is_context_specific(tag_info)) {
- /* BACnetActionList */
- offset = fActionList (tvb, pinfo, tree,offset);
- } else {
- /* BACnetAction */
- offset = fApplicationTypesEnumerated (tvb, pinfo, tree, offset, ar,
- BACnetAction);
- }
- break;
- case 30: /* BACnetAddressBinding */
- offset = fAddressBinding (tvb,pinfo,tree,offset);
- break;
- case 54: /* list of object property reference */
- offset = fLOPR (tvb, pinfo, tree,offset);
- break;
- case 55: /* list-of-session-keys */
- fSessionKey (tvb, tree, offset);
- break;
- case 79: /* object-type */
- case 96: /* protocol-object-types-supported */
- offset = fApplicationTypesEnumeratedSplit (tvb, pinfo, tree, offset, ar,
- BACnetObjectType, 128);
- break;
- case 97: /* Protocol-Services-Supported */
- offset = fApplicationTypesEnumerated (tvb, pinfo, tree, offset, ar,
- BACnetServicesSupported);
- break;
- case 102: /* recipient-list */
- offset = fDestination (tvb, pinfo, tree, offset);
- break;
- case 107: /* segmentation-supported */
- offset = fApplicationTypesEnumerated (tvb, pinfo, tree, offset, ar,
- BACnetSegmentation);
- break;
- case 111: /* Status-Flags */
- offset = fApplicationTypesEnumerated (tvb, pinfo, tree, offset, ar,
- BACnetStatusFlags);
- break;
- case 112: /* System-Status */
- offset = fApplicationTypesEnumerated (tvb, pinfo, tree, offset, ar,
- BACnetDeviceStatus);
- break;
- case 117: /* units */
- offset = fApplicationTypesEnumerated (tvb, pinfo, tree, offset, ar,
- BACnetEngineeringUnits);
- break;
- case 87: /* priority-array -- accessed as a BACnetARRAY */
- if (propertyArrayIndex == 0) {
- /* BACnetARRAY index 0 refers to the length
- of the array, not the elements of the array */
- offset = fApplicationTypes (tvb, pinfo, tree, offset, ar);
- } else {
- offset = fPriorityArray (tvb, pinfo, tree, offset);
- }
- break;
- case 38: /* exception-schedule */
- if (object_type < 128) {
- if (propertyArrayIndex == 0) {
- /* BACnetARRAY index 0 refers to the length
- of the array, not the elements of the array */
- offset = fApplicationTypes (tvb, pinfo, tree, offset, ar);
- } else {
- offset = fSpecialEvent (tvb,pinfo,tree,offset);
- }
- }
- break;
- case 19: /* controlled-variable-reference */
- case 60: /* manipulated-variable-reference */
- case 109: /* Setpoint-Reference */
- case 132: /* log-device-object-property */
- offset = fDeviceObjectPropertyReference (tvb, pinfo, tree, offset);
- break;
- case 123: /* weekly-schedule -- accessed as a BACnetARRAY */
- if (object_type < 128) {
- if (propertyArrayIndex == 0) {
- /* BACnetARRAY index 0 refers to the length
- of the array, not the elements of the array */
- offset = fApplicationTypes (tvb, pinfo, tree, offset, ar);
- } else {
- offset = fWeeklySchedule (tvb, pinfo, tree, offset);
- }
- }
- break;
- case 127: /* client COV increment */
- offset = fClientCOV (tvb, pinfo, tree, offset);
- break;
- case 131: /* log-buffer */
- if ( object_type == 25 )
- offset = fEventLogRecord(tvb, pinfo, tree, offset);
- else if ( object_type == 27 )
- offset = fLogMultipleRecord (tvb, pinfo, tree, offset);
- else
- offset = fLogRecord (tvb, pinfo, tree, offset);
- break;
- case 159: /* member-of */
- case 165: /* zone-members */
- offset = fDeviceObjectReference (tvb, pinfo, tree, offset);
- break;
- case 196: /* last-restart-reason */
- offset = fRestartReason (tvb, pinfo, tree, offset);
- break;
- case 212: /* actual-shed-level */
- case 214: /* expected-shed-level */
- case 218: /* requested-shed-level */
- offset = fShedLevel (tvb, tree, offset);
- break;
- case 152: /* active-cov-subscriptions */
- offset = fCOVSubscription (tvb, pinfo, tree, offset);
- break;
- case 23: /* date-list */
- offset = fCalendarEntry(tvb, tree, offset);
- break;
- case 116: /* time-sychronization-recipients */
- offset = fRecipient(tvb, pinfo, tree, offset);
- break;
- case 83: /* event-parameters */
- offset = fEventParameter(tvb, pinfo, tree, offset);
- break;
- case 211: /* subordinate-list */
- offset = fDeviceObjectReference (tvb, pinfo, tree, offset);
- break;
- case 130: /* event-time-stamp */
- offset = fEventTimeStamps(tvb, pinfo, tree, offset);
- break;
- case 197: /* logging-type */
- offset = fApplicationTypesEnumerated(tvb, pinfo, tree, offset, ar, BACnetLoggingType);
- break;
- case 36: /* event-state */
- offset = fApplicationTypesEnumeratedSplit(tvb, pinfo, tree, offset, ar, BACnetEventState, 64);
- break;
- case 103: /* reliability */
- offset = fApplicationTypesEnumerated(tvb, pinfo, tree, offset, ar, BACnetReliability);
- break;
- case 72: /* notify-type */
- offset = fApplicationTypesEnumerated(tvb, pinfo, tree, offset, ar, BACnetNotifyType);
- break;
- case 208: /* node-type */
- offset = fApplicationTypesEnumerated(tvb, pinfo, tree, offset, ar, BACnetNodeType);
- break;
- case 231: /* door-status */
- offset = fApplicationTypesEnumerated(tvb, pinfo, tree, offset, ar, BACnetDoorStatus);
- break;
- case 233: /* lock-status */
- offset = fApplicationTypesEnumerated(tvb, pinfo, tree, offset, ar, BACnetLockStatus);
- break;
- case 235: /* secured-status */
- offset = fApplicationTypesEnumerated(tvb, pinfo, tree, offset, ar, BACnetDoorSecuredStatus);
- break;
- case 158: /* maintenance-required */
- offset = fApplicationTypesEnumerated(tvb, pinfo, tree, offset, ar, BACnetMaintenance);
- break;
- case 92: /* program-state */
- offset = fApplicationTypesEnumerated(tvb, pinfo, tree, offset, ar, BACnetProgramState);
- break;
- case 90: /* program-change */
- offset = fApplicationTypesEnumerated(tvb, pinfo, tree, offset, ar, BACnetProgramRequest);
- break;
- case 100: /* reason-for-halt */
- offset = fApplicationTypesEnumerated(tvb, pinfo, tree, offset, ar, BACnetProgramError);
- break;
- case 160: /* mode */
- offset = fApplicationTypesEnumerated(tvb, pinfo, tree, offset, ar, BACnetLifeSafetyMode);
- break;
- case 163: /* silenced */
- offset = fApplicationTypesEnumerated(tvb, pinfo, tree, offset, ar, BACnetSilencedState);
- break;
- case 161: /* operation-expected */
- offset = fApplicationTypesEnumerated(tvb, pinfo, tree, offset, ar, BACnetLifeSafetyOperation);
- break;
- case 164: /* tracking-value */
- offset = fApplicationTypesEnumerated(tvb, pinfo, tree, offset, ar, BACnetLifeSafetyState);
- break;
- case 41: /* file-access-method */
- offset = fApplicationTypesEnumerated(tvb, pinfo, tree, offset, ar, BACnetFileAccessMethod);
- break;
- case 185: /* prescale */
- offset = fPrescale(tvb, pinfo, tree, offset);
- break;
- case 187: /* scale */
- offset = fScale(tvb, pinfo, tree, offset);
- break;
- case 184: /* logging-record */
- offset = fLoggingRecord(tvb, pinfo, tree, offset);
- break;
- case 228: /* door-members */
- offset = fDoorMembers(tvb, pinfo, tree, offset);
- break;
- case 181: /* input-reference */
- offset = fObjectPropertyReference(tvb, pinfo, tree, offset);
- break;
- case 78: /* object-property-reference */
- offset = fObjectPropertyReference(tvb, pinfo, tree, offset);
- break;
- case 234: /* masked-alarm-values */
- offset = fSequenceOfEnums(tvb, pinfo, tree, offset, "masked-alarm-value: ", BACnetDoorAlarmState);
- break;
- case 53: /* list-of-group-members */
- save_object_type = object_type;
- offset = fListOfGroupMembers(tvb, pinfo, tree, offset);
- object_type = save_object_type;
- break;
- case 85: /* present-value */
- if ( object_type == 11 ) /* group object handling of present-value */
- {
- offset = fReadAccessResult(tvb, pinfo, tree, offset);
- break;
- }
- /* intentially fall through here so don't reorder this case statement */
- default:
- if (tag_info) {
- if (tag_is_opening(tag_info)) {
- ++depth;
- offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &tag_info, &lvt);
- } else if (tag_is_closing(tag_info)) {
- --depth;
- offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &tag_info, &lvt);
- } else {
- offset = fContextTaggedValue(tvb, tree, offset, ar);
- }
- } else {
- offset = fApplicationTypes (tvb, pinfo, tree, offset, ar);
- }
- break;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ guint lastoffset = 0, depth = 0;
+ char ar[256];
+ guint32 save_object_type = object_type;
+
+ if (propertyIdentifier >= 0) {
+ g_snprintf (ar, sizeof(ar), "%s: ",
+ val_to_split_str(propertyIdentifier, 512,
+ BACnetPropertyIdentifier,
+ ASHRAE_Reserved_Fmt,
+ Vendor_Proprietary_Fmt));
+ } else {
+ g_snprintf (ar, sizeof(ar), "Abstract Type: ");
+ }
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_is_closing(tag_info)) { /* closing tag, but not for me */
+ if (depth <= 0) return offset;
+ }
+
+ /* Application Tags */
+ switch (propertyIdentifier) {
+ case 2: /* action */
+ /* loop object is application tagged,
+ command object is context tagged */
+ if (tag_is_context_specific(tag_info)) {
+ /* BACnetActionList */
+ offset = fActionList (tvb, pinfo, tree,offset);
+ } else {
+ /* BACnetAction */
+ offset = fApplicationTypesEnumerated (tvb, pinfo, tree, offset, ar,
+ BACnetAction);
+ }
+ break;
+ case 30: /* BACnetAddressBinding */
+ offset = fAddressBinding (tvb,pinfo,tree,offset);
+ break;
+ case 54: /* list of object property reference */
+ offset = fLOPR (tvb, pinfo, tree,offset);
+ break;
+ case 55: /* list-of-session-keys */
+ fSessionKey (tvb, tree, offset);
+ break;
+ case 79: /* object-type */
+ case 96: /* protocol-object-types-supported */
+ offset = fApplicationTypesEnumeratedSplit (tvb, pinfo, tree, offset, ar,
+ BACnetObjectType, 128);
+ break;
+ case 97: /* Protocol-Services-Supported */
+ offset = fApplicationTypesEnumerated (tvb, pinfo, tree, offset, ar,
+ BACnetServicesSupported);
+ break;
+ case 102: /* recipient-list */
+ offset = fDestination (tvb, pinfo, tree, offset);
+ break;
+ case 107: /* segmentation-supported */
+ offset = fApplicationTypesEnumerated (tvb, pinfo, tree, offset, ar,
+ BACnetSegmentation);
+ break;
+ case 111: /* Status-Flags */
+ offset = fApplicationTypesEnumerated (tvb, pinfo, tree, offset, ar,
+ BACnetStatusFlags);
+ break;
+ case 112: /* System-Status */
+ offset = fApplicationTypesEnumerated (tvb, pinfo, tree, offset, ar,
+ BACnetDeviceStatus);
+ break;
+ case 117: /* units */
+ offset = fApplicationTypesEnumerated (tvb, pinfo, tree, offset, ar,
+ BACnetEngineeringUnits);
+ break;
+ case 87: /* priority-array -- accessed as a BACnetARRAY */
+ if (propertyArrayIndex == 0) {
+ /* BACnetARRAY index 0 refers to the length
+ of the array, not the elements of the array */
+ offset = fApplicationTypes (tvb, pinfo, tree, offset, ar);
+ } else {
+ offset = fPriorityArray (tvb, pinfo, tree, offset);
+ }
+ break;
+ case 38: /* exception-schedule */
+ if (object_type < 128) {
+ if (propertyArrayIndex == 0) {
+ /* BACnetARRAY index 0 refers to the length
+ of the array, not the elements of the array */
+ offset = fApplicationTypes (tvb, pinfo, tree, offset, ar);
+ } else {
+ offset = fSpecialEvent (tvb,pinfo,tree,offset);
+ }
+ }
+ break;
+ case 19: /* controlled-variable-reference */
+ case 60: /* manipulated-variable-reference */
+ case 109: /* Setpoint-Reference */
+ case 132: /* log-device-object-property */
+ offset = fDeviceObjectPropertyReference (tvb, pinfo, tree, offset);
+ break;
+ case 123: /* weekly-schedule -- accessed as a BACnetARRAY */
+ if (object_type < 128) {
+ if (propertyArrayIndex == 0) {
+ /* BACnetARRAY index 0 refers to the length
+ of the array, not the elements of the array */
+ offset = fApplicationTypes (tvb, pinfo, tree, offset, ar);
+ } else {
+ offset = fWeeklySchedule (tvb, pinfo, tree, offset);
+ }
+ }
+ break;
+ case 127: /* client COV increment */
+ offset = fClientCOV (tvb, pinfo, tree, offset);
+ break;
+ case 131: /* log-buffer */
+ if ( object_type == 25 )
+ offset = fEventLogRecord(tvb, pinfo, tree, offset);
+ else if ( object_type == 27 )
+ offset = fLogMultipleRecord (tvb, pinfo, tree, offset);
+ else
+ offset = fLogRecord (tvb, pinfo, tree, offset);
+ break;
+ case 159: /* member-of */
+ case 165: /* zone-members */
+ offset = fDeviceObjectReference (tvb, pinfo, tree, offset);
+ break;
+ case 196: /* last-restart-reason */
+ offset = fRestartReason (tvb, pinfo, tree, offset);
+ break;
+ case 212: /* actual-shed-level */
+ case 214: /* expected-shed-level */
+ case 218: /* requested-shed-level */
+ offset = fShedLevel (tvb, tree, offset);
+ break;
+ case 152: /* active-cov-subscriptions */
+ offset = fCOVSubscription (tvb, pinfo, tree, offset);
+ break;
+ case 23: /* date-list */
+ offset = fCalendarEntry(tvb, tree, offset);
+ break;
+ case 116: /* time-sychronization-recipients */
+ offset = fRecipient(tvb, pinfo, tree, offset);
+ break;
+ case 83: /* event-parameters */
+ offset = fEventParameter(tvb, pinfo, tree, offset);
+ break;
+ case 211: /* subordinate-list */
+ offset = fDeviceObjectReference (tvb, pinfo, tree, offset);
+ break;
+ case 130: /* event-time-stamp */
+ offset = fEventTimeStamps(tvb, pinfo, tree, offset);
+ break;
+ case 197: /* logging-type */
+ offset = fApplicationTypesEnumerated(tvb, pinfo, tree, offset, ar, BACnetLoggingType);
+ break;
+ case 36: /* event-state */
+ offset = fApplicationTypesEnumeratedSplit(tvb, pinfo, tree, offset, ar, BACnetEventState, 64);
+ break;
+ case 103: /* reliability */
+ offset = fApplicationTypesEnumerated(tvb, pinfo, tree, offset, ar, BACnetReliability);
+ break;
+ case 72: /* notify-type */
+ offset = fApplicationTypesEnumerated(tvb, pinfo, tree, offset, ar, BACnetNotifyType);
+ break;
+ case 208: /* node-type */
+ offset = fApplicationTypesEnumerated(tvb, pinfo, tree, offset, ar, BACnetNodeType);
+ break;
+ case 231: /* door-status */
+ offset = fApplicationTypesEnumerated(tvb, pinfo, tree, offset, ar, BACnetDoorStatus);
+ break;
+ case 233: /* lock-status */
+ offset = fApplicationTypesEnumerated(tvb, pinfo, tree, offset, ar, BACnetLockStatus);
+ break;
+ case 235: /* secured-status */
+ offset = fApplicationTypesEnumerated(tvb, pinfo, tree, offset, ar, BACnetDoorSecuredStatus);
+ break;
+ case 158: /* maintenance-required */
+ offset = fApplicationTypesEnumerated(tvb, pinfo, tree, offset, ar, BACnetMaintenance);
+ break;
+ case 92: /* program-state */
+ offset = fApplicationTypesEnumerated(tvb, pinfo, tree, offset, ar, BACnetProgramState);
+ break;
+ case 90: /* program-change */
+ offset = fApplicationTypesEnumerated(tvb, pinfo, tree, offset, ar, BACnetProgramRequest);
+ break;
+ case 100: /* reason-for-halt */
+ offset = fApplicationTypesEnumerated(tvb, pinfo, tree, offset, ar, BACnetProgramError);
+ break;
+ case 160: /* mode */
+ offset = fApplicationTypesEnumerated(tvb, pinfo, tree, offset, ar, BACnetLifeSafetyMode);
+ break;
+ case 163: /* silenced */
+ offset = fApplicationTypesEnumerated(tvb, pinfo, tree, offset, ar, BACnetSilencedState);
+ break;
+ case 161: /* operation-expected */
+ offset = fApplicationTypesEnumerated(tvb, pinfo, tree, offset, ar, BACnetLifeSafetyOperation);
+ break;
+ case 164: /* tracking-value */
+ offset = fApplicationTypesEnumerated(tvb, pinfo, tree, offset, ar, BACnetLifeSafetyState);
+ break;
+ case 41: /* file-access-method */
+ offset = fApplicationTypesEnumerated(tvb, pinfo, tree, offset, ar, BACnetFileAccessMethod);
+ break;
+ case 185: /* prescale */
+ offset = fPrescale(tvb, pinfo, tree, offset);
+ break;
+ case 187: /* scale */
+ offset = fScale(tvb, pinfo, tree, offset);
+ break;
+ case 184: /* logging-record */
+ offset = fLoggingRecord(tvb, pinfo, tree, offset);
+ break;
+ case 228: /* door-members */
+ offset = fDoorMembers(tvb, pinfo, tree, offset);
+ break;
+ case 181: /* input-reference */
+ offset = fObjectPropertyReference(tvb, pinfo, tree, offset);
+ break;
+ case 78: /* object-property-reference */
+ offset = fObjectPropertyReference(tvb, pinfo, tree, offset);
+ break;
+ case 234: /* masked-alarm-values */
+ offset = fSequenceOfEnums(tvb, pinfo, tree, offset, "masked-alarm-value: ", BACnetDoorAlarmState);
+ break;
+ case 53: /* list-of-group-members */
+ save_object_type = object_type;
+ offset = fListOfGroupMembers(tvb, pinfo, tree, offset);
+ object_type = save_object_type;
+ break;
+ case 85: /* present-value */
+ if ( object_type == 11 ) /* group object handling of present-value */
+ {
+ offset = fReadAccessResult(tvb, pinfo, tree, offset);
+ break;
+ }
+ /* intentially fall through here so don't reorder this case statement */
+ default:
+ if (tag_info) {
+ if (tag_is_opening(tag_info)) {
+ ++depth;
+ offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ } else if (tag_is_closing(tag_info)) {
+ --depth;
+ offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ } else {
+ offset = fContextTaggedValue(tvb, tree, offset, ar);
+ }
+ } else {
+ offset = fApplicationTypes (tvb, pinfo, tree, offset, ar);
+ }
+ break;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fPropertyValue (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset, guint8 tag_info)
{
- guint8 tag_no;
- guint32 lvt;
+ guint8 tag_no;
+ guint32 lvt;
- if (tag_is_opening(tag_info)) {
- offset += fTagHeaderTree(tvb, tree, offset,
- &tag_no, &tag_info, &lvt);
- offset = fAbstractSyntaxNType (tvb, pinfo, tree, offset);
- if (tvb_length_remaining(tvb, offset) > 0) {
- offset += fTagHeaderTree(tvb, tree, offset,
- &tag_no, &tag_info, &lvt);
- }
- } else {
- proto_tree_add_text(tree, tvb, offset, tvb_length(tvb) - offset,
- "expected Opening Tag!"); \
- offset = tvb_length(tvb);
- }
+ if (tag_is_opening(tag_info)) {
+ offset += fTagHeaderTree(tvb, tree, offset,
+ &tag_no, &tag_info, &lvt);
+ offset = fAbstractSyntaxNType (tvb, pinfo, tree, offset);
+ if (tvb_length_remaining(tvb, offset) > 0) {
+ offset += fTagHeaderTree(tvb, tree, offset,
+ &tag_no, &tag_info, &lvt);
+ }
+ } else {
+ proto_tree_add_text(tree, tvb, offset, tvb_length(tvb) - offset,
+ "expected Opening Tag!");
+ offset = tvb_length(tvb);
+ }
- return offset;
+ return offset;
}
static guint
fPropertyIdentifierValue (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset, guint8 tagoffset)
{
- guint lastoffset = offset;
- guint8 tag_no, tag_info;
- guint32 lvt;
+ guint lastoffset = offset;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
- offset = fPropertyReference(tvb, pinfo, tree, offset, tagoffset, 0);
- if (offset > lastoffset) {
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_no == tagoffset+2) { /* Value - might not be present in ReadAccessResult */
- offset = fPropertyValue (tvb, pinfo, tree, offset, tag_info);
- }
- }
- return offset;
+ offset = fPropertyReference(tvb, pinfo, tree, offset, tagoffset, 0);
+ if (offset > lastoffset) {
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_no == tagoffset+2) { /* Value - might not be present in ReadAccessResult */
+ offset = fPropertyValue (tvb, pinfo, tree, offset, tag_info);
+ }
+ }
+ return offset;
}
static guint
fBACnetPropertyValue (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0;
- guint8 tag_no, tag_info;
- guint32 lvt;
+ guint lastoffset = 0;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- offset = fPropertyIdentifierValue(tvb, pinfo, tree, offset, 0);
- if (offset > lastoffset) {
- /* detect optional priority
- by looking to see if the next tag is context tag number 3 */
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_context_specific(tag_info) && (tag_no == 3))
- offset = fUnsignedTag (tvb,tree,offset,"Priority: ");
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ offset = fPropertyIdentifierValue(tvb, pinfo, tree, offset, 0);
+ if (offset > lastoffset) {
+ /* detect optional priority
+ by looking to see if the next tag is context tag number 3 */
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_is_context_specific(tag_info) && (tag_no == 3))
+ offset = fUnsignedTag (tvb,tree,offset,"Priority: ");
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fSubscribeCOVPropertyRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0, len;
- guint8 tag_no, tag_info;
- guint32 lvt;
- proto_tree *subtree = tree;
- proto_item *tt;
-
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_closing(tag_info)) {
- offset += len;
- subtree = tree;
- continue;
- }
-
- switch (tag_no) {
- case 0: /* ProcessId */
- offset = fUnsignedTag (tvb, tree, offset, "subscriber Process Id: ");
- break;
- case 1: /* monitored ObjectId */
- offset = fObjectIdentifier (tvb, pinfo, tree, offset);
- break;
- case 2: /* issueConfirmedNotifications */
- offset = fBooleanTag (tvb, tree, offset, "issue Confirmed Notifications: ");
- break;
- case 3: /* life time */
- offset = fTimeSpan (tvb,tree,offset,"life time");
- break;
- case 4: /* monitoredPropertyIdentifier */
- if (tag_is_opening(tag_info)) {
- tt = proto_tree_add_text(subtree, tvb, offset, 1, "monitoredPropertyIdentifier");
- if (tt) {
- subtree = proto_item_add_subtree(tt, ett_bacapp_value);
- }
- offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- offset = fBACnetPropertyReference (tvb, pinfo, subtree, offset, 1);
- break;
- }
- FAULT;
- break;
- case 5: /* covIncrement */
- offset = fRealTag (tvb, tree, offset, "COV Increment: ");
- break;
- default:
- return offset;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint lastoffset = 0, len;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ proto_tree *subtree = tree;
+ proto_item *tt;
+
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_is_closing(tag_info)) {
+ offset += len;
+ subtree = tree;
+ continue;
+ }
+
+ switch (tag_no) {
+ case 0: /* ProcessId */
+ offset = fUnsignedTag (tvb, tree, offset, "subscriber Process Id: ");
+ break;
+ case 1: /* monitored ObjectId */
+ offset = fObjectIdentifier (tvb, pinfo, tree, offset);
+ break;
+ case 2: /* issueConfirmedNotifications */
+ offset = fBooleanTag (tvb, tree, offset, "issue Confirmed Notifications: ");
+ break;
+ case 3: /* life time */
+ offset = fTimeSpan (tvb,tree,offset,"life time");
+ break;
+ case 4: /* monitoredPropertyIdentifier */
+ if (tag_is_opening(tag_info)) {
+ tt = proto_tree_add_text(subtree, tvb, offset, 1, "monitoredPropertyIdentifier");
+ if (tt) {
+ subtree = proto_item_add_subtree(tt, ett_bacapp_value);
+ }
+ offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ offset = fBACnetPropertyReference (tvb, pinfo, subtree, offset, 1);
+ break;
+ }
+ FAULT;
+ break;
+ case 5: /* covIncrement */
+ offset = fRealTag (tvb, tree, offset, "COV Increment: ");
+ break;
+ default:
+ return offset;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fSubscribeCOVRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- return fSubscribeCOVPropertyRequest(tvb, pinfo, tree, offset);
+ return fSubscribeCOVPropertyRequest(tvb, pinfo, tree, offset);
}
static guint
fWhoHas (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0;
+ guint lastoffset = 0;
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
- switch (fTagNo(tvb, offset)) {
- case 0: /* deviceInstanceLowLimit */
- offset = fUnsignedTag (tvb, tree, offset, "device Instance Low Limit: ");
- break;
- case 1: /* deviceInstanceHighLimit */
- offset = fUnsignedTag (tvb, tree, offset, "device Instance High Limit: ");
- break;
- case 2: /* BACnetObjectId */
- offset = fObjectIdentifier (tvb, pinfo, tree, offset);
- break;
- case 3: /* messageText */
- offset = fCharacterString (tvb,tree,offset, "Object Name: ");
- break;
- default:
- return offset;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ switch (fTagNo(tvb, offset)) {
+ case 0: /* deviceInstanceLowLimit */
+ offset = fUnsignedTag (tvb, tree, offset, "device Instance Low Limit: ");
+ break;
+ case 1: /* deviceInstanceHighLimit */
+ offset = fUnsignedTag (tvb, tree, offset, "device Instance High Limit: ");
+ break;
+ case 2: /* BACnetObjectId */
+ offset = fObjectIdentifier (tvb, pinfo, tree, offset);
+ break;
+ case 3: /* messageText */
+ offset = fCharacterString (tvb,tree,offset, "Object Name: ");
+ break;
+ default:
+ return offset;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fDailySchedule (tvbuff_t *tvb, packet_info *pinfo, proto_tree *subtree, guint offset)
{
- guint lastoffset = 0;
- guint8 tag_no, tag_info;
- guint32 lvt;
-
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_opening(tag_info) && tag_no == 0) {
- offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); /* opening context tag 0 */
- while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_closing(tag_info)) {
- /* should be closing context tag 0 */
- offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- return offset;
- }
-
- offset = fTimeValue (tvb, pinfo, subtree, offset);
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- } else if (tag_no == 0 && lvt == 0) {
- /* not sure null (empty array element) is legal */
- offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- }
- return offset;
+ guint lastoffset = 0;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_is_opening(tag_info) && tag_no == 0) {
+ offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); /* opening context tag 0 */
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_is_closing(tag_info)) {
+ /* should be closing context tag 0 */
+ offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ return offset;
+ }
+
+ offset = fTimeValue (tvb, pinfo, subtree, offset);
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ } else if (tag_no == 0 && lvt == 0) {
+ /* not sure null (empty array element) is legal */
+ offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ }
+ return offset;
}
static guint
fWeeklySchedule (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0;
- guint8 tag_no, tag_info;
- guint32 lvt;
- guint i = 1; /* day of week array index */
- proto_tree *subtree = tree;
- proto_item *tt;
-
- if (propertyArrayIndex > 0) {
- /* BACnetARRAY index 0 refers to the length
- of the array, not the elements of the array.
- BACnetARRAY index -1 is our internal flag that
- the optional index was not used.
- BACnetARRAY refers to this as all elements of the array.
- If the optional index is specified for a BACnetARRAY,
- then that specific array element is referenced. */
- i = propertyArrayIndex;
- }
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_closing(tag_info)) {
- return offset; /* outer encoding will print out closing tag */
- }
- tt = proto_tree_add_text(tree, tvb, offset, 0, "%s", val_to_str(i++, day_of_week, "day of week (%d) not found"));
- subtree = proto_item_add_subtree(tt, ett_bacapp_value);
- offset = fDailySchedule (tvb, pinfo, subtree, offset);
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint lastoffset = 0;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ guint i = 1; /* day of week array index */
+ proto_tree *subtree = tree;
+ proto_item *tt;
+
+ if (propertyArrayIndex > 0) {
+ /* BACnetARRAY index 0 refers to the length
+ of the array, not the elements of the array.
+ BACnetARRAY index -1 is our internal flag that
+ the optional index was not used.
+ BACnetARRAY refers to this as all elements of the array.
+ If the optional index is specified for a BACnetARRAY,
+ then that specific array element is referenced. */
+ i = propertyArrayIndex;
+ }
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_is_closing(tag_info)) {
+ return offset; /* outer encoding will print out closing tag */
+ }
+ tt = proto_tree_add_text(tree, tvb, offset, 0, "%s", val_to_str(i++, day_of_week, "day of week (%d) not found"));
+ subtree = proto_item_add_subtree(tt, ett_bacapp_value);
+ offset = fDailySchedule (tvb, pinfo, subtree, offset);
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fUTCTimeSynchronizationRequest (tvbuff_t *tvb, proto_tree *tree, guint offset)
{
- if (tvb_reported_length_remaining(tvb, offset) <= 0)
- return offset;
+ if (tvb_reported_length_remaining(tvb, offset) <= 0)
+ return offset;
- return fDateTime (tvb, tree, offset, "UTC-Time: ");
+ return fDateTime (tvb, tree, offset, "UTC-Time: ");
}
static guint
fTimeSynchronizationRequest (tvbuff_t *tvb, proto_tree *tree, guint offset)
{
- if (tvb_reported_length_remaining(tvb, offset) <= 0)
- return offset;
+ if (tvb_reported_length_remaining(tvb, offset) <= 0)
+ return offset;
- return fDateTime (tvb, tree, offset, NULL);
+ return fDateTime (tvb, tree, offset, NULL);
}
static guint
fDateRange (tvbuff_t *tvb, proto_tree *tree, guint offset)
{
- if (tvb_reported_length_remaining(tvb, offset) <= 0)
- return offset;
- offset = fDate (tvb,tree,offset,"Start Date: ");
- return fDate (tvb, tree, offset, "End Date: ");
+ if (tvb_reported_length_remaining(tvb, offset) <= 0)
+ return offset;
+ offset = fDate (tvb,tree,offset,"Start Date: ");
+ return fDate (tvb, tree, offset, "End Date: ");
}
static guint
fVendorIdentifier (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint32 val = 0;
- guint8 tag_no, tag_info;
- guint32 lvt;
- guint tag_len;
- proto_item *ti;
- proto_tree *subtree;
- const gchar *label = "Vendor ID";
+ guint32 val = 0;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ guint tag_len;
+ proto_item *ti;
+ proto_tree *subtree;
+ const gchar *label = "Vendor ID";
- tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (fUnsigned32 (tvb, offset + tag_len, lvt, &val))
- ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
- "%s: %s (%u)", label,
- val_to_str(val,BACnetVendorIdentifiers,"Unknown Vendor"), val);
- else
- ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
- "%s - %u octets (Unsigned)", label, lvt);
- subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
- fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (fUnsigned32 (tvb, offset + tag_len, lvt, &val))
+ ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
+ "%s: %s (%u)", label,
+ val_to_str(val,BACnetVendorIdentifiers,"Unknown Vendor"), val);
+ else
+ ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
+ "%s - %u octets (Unsigned)", label, lvt);
+ subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
+ fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- if ((lvt < 1) || (lvt > 2)) { /* vendorIDs >= 1 and <= 2 are supported */
- proto_item *expert_item;
- expert_item = proto_tree_add_text(tree, tvb, 0, lvt, "Wrong length indicated. Expected 1 or 2, got %u", lvt);
- expert_add_info_format(pinfo, expert_item, PI_MALFORMED, PI_ERROR, "Wrong length indicated. Expected 1 or 2, got %u", lvt);
- PROTO_ITEM_SET_GENERATED(expert_item);
- return offset+tag_len+lvt;
- }
+ if ((lvt < 1) || (lvt > 2)) { /* vendorIDs >= 1 and <= 2 are supported */
+ proto_item *expert_item;
+ expert_item = proto_tree_add_text(tree, tvb, 0, lvt, "Wrong length indicated. Expected 1 or 2, got %u", lvt);
+ expert_add_info_format(pinfo, expert_item, PI_MALFORMED, PI_ERROR, "Wrong length indicated. Expected 1 or 2, got %u", lvt);
+ PROTO_ITEM_SET_GENERATED(expert_item);
+ return offset+tag_len+lvt;
+ }
- proto_tree_add_item(subtree, hf_BACnetVendorIdentifier, tvb,
- offset+tag_len, lvt, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_BACnetVendorIdentifier, tvb,
+ offset+tag_len, lvt, ENC_BIG_ENDIAN);
- return offset+tag_len+lvt;
+ return offset+tag_len+lvt;
}
static guint
fRestartReason (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint32 val = 0;
- guint8 tag_no, tag_info;
- guint32 lvt;
- guint tag_len;
- proto_item *ti;
- proto_tree *subtree;
- const gchar *label = "Restart Reason";
+ guint32 val = 0;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ guint tag_len;
+ proto_item *ti;
+ proto_tree *subtree;
+ const gchar *label = "Restart Reason";
- tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (fUnsigned32 (tvb, offset + tag_len, lvt, &val))
- ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
- "%s: %s (%u)", label,
- val_to_str(val,BACnetRestartReason,"Unknown reason"), val);
- else
- ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
- "%s - %u octets (Unsigned)", label, lvt);
- subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
- fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (fUnsigned32 (tvb, offset + tag_len, lvt, &val))
+ ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
+ "%s: %s (%u)", label,
+ val_to_str(val,BACnetRestartReason,"Unknown reason"), val);
+ else
+ ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len,
+ "%s - %u octets (Unsigned)", label, lvt);
+ subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
+ fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- if (lvt != 1) {
- proto_item *expert_item;
- expert_item = proto_tree_add_text(tree, tvb, 0, lvt, "Wrong length indicated. Expected 1, got %u", lvt);
- expert_add_info_format(pinfo, expert_item, PI_MALFORMED, PI_ERROR, "Wrong length indicated. Expected 1, got %u", lvt);
- PROTO_ITEM_SET_GENERATED(expert_item);
- return offset+tag_len+lvt;
- }
+ if (lvt != 1) {
+ proto_item *expert_item;
+ expert_item = proto_tree_add_text(tree, tvb, 0, lvt, "Wrong length indicated. Expected 1, got %u", lvt);
+ expert_add_info_format(pinfo, expert_item, PI_MALFORMED, PI_ERROR, "Wrong length indicated. Expected 1, got %u", lvt);
+ PROTO_ITEM_SET_GENERATED(expert_item);
+ return offset+tag_len+lvt;
+ }
- proto_tree_add_item(subtree, hf_BACnetRestartReason, tvb,
- offset+tag_len, lvt, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_BACnetRestartReason, tvb,
+ offset+tag_len, lvt, ENC_BIG_ENDIAN);
- return offset+tag_len+lvt;
+ return offset+tag_len+lvt;
}
static guint
fConfirmedTextMessageRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0;
-
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- switch (fTagNo(tvb, offset)) {
-
- case 0: /* textMessageSourceDevice */
- offset = fObjectIdentifier (tvb, pinfo, tree, offset);
- break;
- case 1: /* messageClass */
- switch (fTagNo(tvb, offset)) {
- case 0: /* numeric */
- offset = fUnsignedTag (tvb, tree, offset, "message Class: ");
- break;
- case 1: /* character */
- offset = fCharacterString (tvb, tree, offset, "message Class: ");
- break;
- }
- break;
- case 2: /* messagePriority */
- offset = fEnumeratedTag (tvb, tree, offset, "message Priority: ",
- BACnetMessagePriority);
- break;
- case 3: /* message */
- offset = fCharacterString (tvb, tree, offset, "message: ");
- break;
- default:
- return offset;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint lastoffset = 0;
+
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ switch (fTagNo(tvb, offset)) {
+
+ case 0: /* textMessageSourceDevice */
+ offset = fObjectIdentifier (tvb, pinfo, tree, offset);
+ break;
+ case 1: /* messageClass */
+ switch (fTagNo(tvb, offset)) {
+ case 0: /* numeric */
+ offset = fUnsignedTag (tvb, tree, offset, "message Class: ");
+ break;
+ case 1: /* character */
+ offset = fCharacterString (tvb, tree, offset, "message Class: ");
+ break;
+ }
+ break;
+ case 2: /* messagePriority */
+ offset = fEnumeratedTag (tvb, tree, offset, "message Priority: ",
+ BACnetMessagePriority);
+ break;
+ case 3: /* message */
+ offset = fCharacterString (tvb, tree, offset, "message: ");
+ break;
+ default:
+ return offset;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fUnconfirmedTextMessageRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- return fConfirmedTextMessageRequest(tvb, pinfo, tree, offset);
+ return fConfirmedTextMessageRequest(tvb, pinfo, tree, offset);
}
static guint
fConfirmedPrivateTransferRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0, len;
- guint8 tag_no, tag_info;
- guint32 lvt;
- proto_tree *subtree = tree;
- proto_item *tt;
- tvbuff_t *next_tvb;
- guint vendor_identifier = 0;
- guint service_number = 0;
-
- lastoffset = offset;
- len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- fUnsigned32(tvb, offset+len, lvt, &vendor_identifier);
- if (col_get_writable(pinfo->cinfo))
- col_append_fstr(pinfo->cinfo, COL_INFO, "V=%u ", vendor_identifier);
- offset = fVendorIdentifier (tvb, pinfo, subtree, offset);
-
- next_tvb = tvb_new_subset_remaining(tvb,offset);
- if (dissector_try_uint(bacapp_dissector_table,
- vendor_identifier, next_tvb, pinfo, tree)) {
- /* we parsed it so skip over length and we are done */
- offset += tvb_length(next_tvb);
- return offset;
- }
-
- /* Not handled by vendor dissector */
-
- /* exit loop if nothing happens inside */
- while (tvb_reported_length_remaining(tvb, offset)) {
- lastoffset = offset;
- len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_closing(tag_info)) {
- if (tag_no == 2) { /* Make sure it's the expected tag */
- offset += len;
- subtree = tree;
- continue;
- } else {
- break; /* End loop if incorrect closing tag */
- }
- }
- switch (tag_no) {
-
- /* vendorID is now parsed above */
- case 1: /* serviceNumber */
- fUnsigned32(tvb, offset+len, lvt, &service_number);
- if (col_get_writable(pinfo->cinfo))
- col_append_fstr(pinfo->cinfo, COL_INFO, "SN=%u ", service_number);
- offset = fUnsignedTag (tvb, subtree, offset, "service Number: ");
- break;
- case 2: /*serviceParameters */
- if (tag_is_opening(tag_info)) {
- tt = proto_tree_add_text(subtree, tvb, offset, 1, "service Parameters");
- subtree = proto_item_add_subtree(tt, ett_bacapp_value);
- propertyIdentifier = -1;
- offset = fAbstractSyntaxNType (tvb, pinfo, subtree, offset);
- break;
- }
- FAULT;
- break;
- default:
- return offset;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
-
- return offset;
+ guint lastoffset = 0, len;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ proto_tree *subtree = tree;
+ proto_item *tt;
+ tvbuff_t *next_tvb;
+ guint vendor_identifier = 0;
+ guint service_number = 0;
+
+ lastoffset = offset;
+ len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ fUnsigned32(tvb, offset+len, lvt, &vendor_identifier);
+ if (col_get_writable(pinfo->cinfo))
+ col_append_fstr(pinfo->cinfo, COL_INFO, "V=%u ", vendor_identifier);
+ offset = fVendorIdentifier (tvb, pinfo, subtree, offset);
+
+ next_tvb = tvb_new_subset_remaining(tvb,offset);
+ if (dissector_try_uint(bacapp_dissector_table,
+ vendor_identifier, next_tvb, pinfo, tree)) {
+ /* we parsed it so skip over length and we are done */
+ offset += tvb_length(next_tvb);
+ return offset;
+ }
+
+ /* Not handled by vendor dissector */
+
+ /* exit loop if nothing happens inside */
+ while (tvb_reported_length_remaining(tvb, offset) > 0) {
+ lastoffset = offset;
+ len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_is_closing(tag_info)) {
+ if (tag_no == 2) { /* Make sure it's the expected tag */
+ offset += len;
+ subtree = tree;
+ continue;
+ } else {
+ break; /* End loop if incorrect closing tag */
+ }
+ }
+ switch (tag_no) {
+
+ /* vendorID is now parsed above */
+ case 1: /* serviceNumber */
+ fUnsigned32(tvb, offset+len, lvt, &service_number);
+ if (col_get_writable(pinfo->cinfo))
+ col_append_fstr(pinfo->cinfo, COL_INFO, "SN=%u ", service_number);
+ offset = fUnsignedTag (tvb, subtree, offset, "service Number: ");
+ break;
+ case 2: /*serviceParameters */
+ if (tag_is_opening(tag_info)) {
+ tt = proto_tree_add_text(subtree, tvb, offset, 1, "service Parameters");
+ subtree = proto_item_add_subtree(tt, ett_bacapp_value);
+ propertyIdentifier = -1;
+ offset = fAbstractSyntaxNType (tvb, pinfo, subtree, offset);
+ break;
+ }
+ FAULT;
+ break;
+ default:
+ return offset;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+
+ return offset;
}
static guint
fUnconfirmedPrivateTransferRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- return fConfirmedPrivateTransferRequest(tvb, pinfo, tree, offset);
+ return fConfirmedPrivateTransferRequest(tvb, pinfo, tree, offset);
}
static guint
fConfirmedPrivateTransferAck(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- return fConfirmedPrivateTransferRequest(tvb, pinfo, tree, offset);
+ return fConfirmedPrivateTransferRequest(tvb, pinfo, tree, offset);
}
static guint
fLifeSafetyOperationRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset, const gchar *label)
{
- guint lastoffset = 0;
- guint8 tag_no, tag_info;
- guint32 lvt;
- proto_tree *subtree = tree;
- proto_item *tt;
-
- if (label != NULL) {
- tt = proto_tree_add_text (subtree, tvb, offset, 1, "%s", label);
- subtree = proto_item_add_subtree(tt, ett_bacapp_value);
- }
-
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
-
- switch (tag_no) {
- case 0: /* subscriberProcessId */
- offset = fUnsignedTag (tvb, subtree, offset, "requesting Process Id: ");
- break;
- case 1: /* requestingSource */
- offset = fCharacterString (tvb, tree, offset, "requesting Source: ");
- break;
- case 2: /* request */
- offset = fEnumeratedTagSplit (tvb, tree, offset,
- "request: ", BACnetLifeSafetyOperation, 64);
- break;
- case 3: /* objectId */
- offset = fObjectIdentifier (tvb, pinfo, subtree, offset);
- break;
- default:
- return offset;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint lastoffset = 0;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ proto_tree *subtree = tree;
+ proto_item *tt;
+
+ if (label != NULL) {
+ tt = proto_tree_add_text (subtree, tvb, offset, 1, "%s", label);
+ subtree = proto_item_add_subtree(tt, ett_bacapp_value);
+ }
+
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+
+ switch (tag_no) {
+ case 0: /* subscriberProcessId */
+ offset = fUnsignedTag (tvb, subtree, offset, "requesting Process Id: ");
+ break;
+ case 1: /* requestingSource */
+ offset = fCharacterString (tvb, tree, offset, "requesting Source: ");
+ break;
+ case 2: /* request */
+ offset = fEnumeratedTagSplit (tvb, tree, offset,
+ "request: ", BACnetLifeSafetyOperation, 64);
+ break;
+ case 3: /* objectId */
+ offset = fObjectIdentifier (tvb, pinfo, subtree, offset);
+ break;
+ default:
+ return offset;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
typedef struct _value_string_enum {
- const value_string *valstr;
+ const value_string *valstr;
} value_string_enum;
static const value_string_enum
BACnetPropertyStatesEnums[] = {
- { NULL },
- {BACnetBinaryPV },
- {BACnetEventType },
- {BACnetPolarity },
- {BACnetProgramRequest },
- {BACnetProgramState },
- {BACnetProgramError },
- {BACnetReliability },
- {BACnetEventState },
- {BACnetDeviceStatus },
- {BACnetEngineeringUnits },
- { NULL },
- {BACnetLifeSafetyMode },
- {BACnetLifeSafetyState },
- {BACnetRestartReason },
- {BACnetDoorAlarmState },
- {BACnetAction },
- {BACnetDoorSecuredStatus },
- {BACnetDoorStatus },
- { NULL }, /* {BACnetDoorValue }, */
- {BACnetFileAccessMethod },
- {BACnetLockStatus },
- {BACnetLifeSafetyOperation },
- {BACnetMaintenance },
- {BACnetNodeType },
- {BACnetNotifyType },
- { NULL }, /* {BACnetSecurityLevel }, */
- {BACnetShedState },
- {BACnetSilencedState },
- { NULL },
- { NULL }, /* {BACnetAccessEvent }, */
- { NULL }, /* {BACnetZoneOccupancyState }, */
- { NULL }, /* {BACnetAccessCredentialDisableReason }, */
- { NULL }, /* {BACnetAccessCredentialDisable }, */
- { NULL }, /* {BACnetAuthenticationStatus }, */
- { NULL },
- { NULL }, /* {BACnetBackupState }, */
+ { NULL },
+ {BACnetBinaryPV },
+ {BACnetEventType },
+ {BACnetPolarity },
+ {BACnetProgramRequest },
+ {BACnetProgramState },
+ {BACnetProgramError },
+ {BACnetReliability },
+ {BACnetEventState },
+ {BACnetDeviceStatus },
+ {BACnetEngineeringUnits },
+ { NULL },
+ {BACnetLifeSafetyMode },
+ {BACnetLifeSafetyState },
+ {BACnetRestartReason },
+ {BACnetDoorAlarmState },
+ {BACnetAction },
+ {BACnetDoorSecuredStatus },
+ {BACnetDoorStatus },
+ { NULL }, /* {BACnetDoorValue }, */
+ {BACnetFileAccessMethod },
+ {BACnetLockStatus },
+ {BACnetLifeSafetyOperation },
+ {BACnetMaintenance },
+ {BACnetNodeType },
+ {BACnetNotifyType },
+ { NULL }, /* {BACnetSecurityLevel }, */
+ {BACnetShedState },
+ {BACnetSilencedState },
+ { NULL },
+ { NULL }, /* {BACnetAccessEvent }, */
+ { NULL }, /* {BACnetZoneOccupancyState }, */
+ { NULL }, /* {BACnetAccessCredentialDisableReason }, */
+ { NULL }, /* {BACnetAccessCredentialDisable }, */
+ { NULL }, /* {BACnetAuthenticationStatus }, */
+ { NULL },
+ { NULL }, /* {BACnetBackupState }, */
};
#define BACnetPropertyStatesEnums_Size 36
static guint
fBACnetPropertyStates(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint offset)
{
- guint8 tag_no, tag_info;
- guint32 lvt;
- const gchar* label = NULL;
-
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- label = ep_strdup_printf( "%s: ", val_to_str_const( tag_no, VALS(BACnetPropertyStates), "unknown-"+tag_no ));
-
- switch (tag_no)
- {
- case 0:
- offset = fBooleanTag (tvb, tree, offset, label);
- break;
- case 11:
- offset = fUnsignedTag(tvb, tree, offset, label);
- break;
- default:
- if ( (tag_no > BACnetPropertyStatesEnums_Size) ||
- VALS(BACnetPropertyStatesEnums[tag_no].valstr) == NULL)
- {
- offset = fEnumeratedTag(tvb, tree, offset, "Unknown State: ", NULL);
- /* don't use Abstract type here because it is context tagged and therefore we don't know app type */
- }
- else
- {
- offset = fEnumeratedTagSplit(tvb, tree, offset, label,
- VALS(BACnetPropertyStatesEnums[tag_no].valstr), 64);
- }
- break;
- }
- return offset;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ const gchar* label = NULL;
+
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ label = ep_strdup_printf( "%s: ", val_to_str_const( tag_no, VALS(BACnetPropertyStates), "unknown-"+tag_no ));
+
+ switch (tag_no) {
+ case 0:
+ offset = fBooleanTag (tvb, tree, offset, label);
+ break;
+ case 11:
+ offset = fUnsignedTag(tvb, tree, offset, label);
+ break;
+ default:
+ if ( (tag_no > BACnetPropertyStatesEnums_Size) ||
+ VALS(BACnetPropertyStatesEnums[tag_no].valstr) == NULL)
+ {
+ offset = fEnumeratedTag(tvb, tree, offset, "Unknown State: ", NULL);
+ /* don't use Abstract type here because it is context tagged and therefore we don't know app type */
+ }
+ else
+ {
+ offset = fEnumeratedTagSplit(tvb, tree, offset, label,
+ VALS(BACnetPropertyStatesEnums[tag_no].valstr), 64);
+ }
+ break;
+ }
+ return offset;
}
@@ -7162,42 +7159,42 @@ BACnetDeviceObjectPropertyValue ::= SEQUENCE {
static guint
fDeviceObjectPropertyValue (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0;
- guint8 tag_no, tag_info;
- guint32 lvt;
-
- while (tvb_reported_length_remaining(tvb, offset)) {
- lastoffset = offset;
- /* check the tag. A closing tag means we are done */
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_closing(tag_info)) {
- return offset;
- }
- switch (tag_no) {
- case 0: /* deviceIdentifier */
- offset = fObjectIdentifier (tvb, pinfo, tree, offset);
- break;
- case 1: /* objectIdentifier */
- offset = fObjectIdentifier (tvb, pinfo, tree, offset);
- break;
- case 2: /* propertyIdentifier */
- offset = fPropertyIdentifier (tvb, pinfo, tree, offset);
- break;
- case 3: /* arrayIndex - OPTIONAL */
- offset = fUnsignedTag (tvb, tree, offset,
- "arrayIndex: ");
- break;
- case 4: /* value */
- offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &tag_info, &lvt);
- offset = fAbstractSyntaxNType (tvb, pinfo, tree, offset);
- offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &tag_info, &lvt);
- break;
- default:
- return offset;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint lastoffset = 0;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+
+ while (tvb_reported_length_remaining(tvb, offset) > 0) {
+ lastoffset = offset;
+ /* check the tag. A closing tag means we are done */
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_is_closing(tag_info)) {
+ return offset;
+ }
+ switch (tag_no) {
+ case 0: /* deviceIdentifier */
+ offset = fObjectIdentifier (tvb, pinfo, tree, offset);
+ break;
+ case 1: /* objectIdentifier */
+ offset = fObjectIdentifier (tvb, pinfo, tree, offset);
+ break;
+ case 2: /* propertyIdentifier */
+ offset = fPropertyIdentifier (tvb, pinfo, tree, offset);
+ break;
+ case 3: /* arrayIndex - OPTIONAL */
+ offset = fUnsignedTag (tvb, tree, offset,
+ "arrayIndex: ");
+ break;
+ case 4: /* value */
+ offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ offset = fAbstractSyntaxNType (tvb, pinfo, tree, offset);
+ offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ default:
+ return offset;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
/*
@@ -7213,7 +7210,7 @@ BACnetDeviceObjectPropertyReference ::= SEQUENCE {
static guint
fObjectPropertyReference (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- return fDeviceObjectPropertyReference(tvb, pinfo, tree, offset);
+ return fDeviceObjectPropertyReference(tvb, pinfo, tree, offset);
}
/*
@@ -7229,3481 +7226,3480 @@ BACnetDeviceObjectPropertyReference ::= SEQUENCE {
static guint
fDeviceObjectPropertyReference (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0;
- guint8 tag_no, tag_info;
- guint32 lvt;
-
- while (tvb_reported_length_remaining(tvb, offset)) {
- lastoffset = offset;
- /* check the tag. A closing tag means we are done */
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_closing(tag_info)) {
- return offset;
- }
- switch (tag_no) {
- case 0: /* objectIdentifier */
- offset = fObjectIdentifier (tvb, pinfo, tree, offset);
- break;
- case 1: /* propertyIdentifier */
- offset = fPropertyIdentifier (tvb, pinfo, tree, offset);
- break;
- case 2: /* arrayIndex - OPTIONAL */
- offset = fUnsignedTag (tvb, tree, offset,
- "arrayIndex: ");
- break;
- case 3: /* deviceIdentifier - OPTIONAL */
- offset = fObjectIdentifier (tvb, pinfo, tree, offset);
- break;
- default:
- return offset;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint lastoffset = 0;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+
+ while (tvb_reported_length_remaining(tvb, offset) > 0) {
+ lastoffset = offset;
+ /* check the tag. A closing tag means we are done */
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_is_closing(tag_info)) {
+ return offset;
+ }
+ switch (tag_no) {
+ case 0: /* objectIdentifier */
+ offset = fObjectIdentifier (tvb, pinfo, tree, offset);
+ break;
+ case 1: /* propertyIdentifier */
+ offset = fPropertyIdentifier (tvb, pinfo, tree, offset);
+ break;
+ case 2: /* arrayIndex - OPTIONAL */
+ offset = fUnsignedTag (tvb, tree, offset,
+ "arrayIndex: ");
+ break;
+ case 3: /* deviceIdentifier - OPTIONAL */
+ offset = fObjectIdentifier (tvb, pinfo, tree, offset);
+ break;
+ default:
+ return offset;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fNotificationParameters (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = offset;
- guint8 tag_no, tag_info;
- guint32 lvt;
- proto_tree *subtree = tree;
- proto_item *tt;
-
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- tt = proto_tree_add_text(subtree, tvb, offset, 0, "notification parameters (%d) %s",
- tag_no, val_to_str(tag_no, BACnetEventType, "invalid type"));
- subtree = proto_item_add_subtree(tt, ett_bacapp_value);
- /* Opening tag for parameter choice */
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
-
- switch (tag_no) {
- case 0: /* change-of-bitstring */
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- switch (fTagNo(tvb, offset)) {
- case 0:
- offset = fBitStringTag (tvb, subtree, offset,
- "referenced-bitstring: ");
- break;
- case 1:
- offset = fBitStringTagVS (tvb, subtree, offset,
- "status-flags: ", BACnetStatusFlags);
- lastoffset = offset;
- break;
- default:
- break;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- break;
- case 1: /* change-of-state */
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- switch (fTagNo(tvb, offset)) {
- case 0:
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- offset = fBACnetPropertyStates(tvb, pinfo, subtree, offset);
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- break;
- case 1:
- offset = fBitStringTagVS (tvb, subtree, offset,
- "status-flags: ", BACnetStatusFlags);
- lastoffset = offset;
- break;
- default:
- break;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- break;
- case 2: /* change-of-value */
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- switch (fTagNo(tvb, offset)) {
- case 0:
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- switch (fTagNo(tvb, offset)) {
- case 0:
- offset = fBitStringTag (tvb, subtree, offset,
- "changed-bits: ");
- break;
- case 1:
- offset = fRealTag (tvb, subtree, offset,
- "changed-value: ");
- break;
- default:
- break;
- }
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- break;
- case 1:
- offset = fBitStringTagVS (tvb, subtree, offset,
- "status-flags: ", BACnetStatusFlags);
- lastoffset = offset;
- break;
- default:
- break;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- break;
- case 3: /* command-failure */
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- switch (fTagNo(tvb, offset)) {
- case 0: /* "command-value: " */
- /* from BACnet Table 13-3,
- Standard Object Property Values Returned in Notifications */
- propertyIdentifier = 85; /* PRESENT_VALUE */
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- offset = fAbstractSyntaxNType (tvb, pinfo, subtree, offset);
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- break;
- case 1:
- offset = fBitStringTagVS (tvb, subtree, offset,
- "status-flags: ", BACnetStatusFlags);
- break;
- case 2: /* "feedback-value: " */
- propertyIdentifier = 40; /* FEEDBACK_VALUE */
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- offset = fAbstractSyntaxNType (tvb, pinfo, subtree, offset);
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- lastoffset = offset;
- break;
- default:
- break;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- break;
- case 4: /* floating-limit */
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- switch (fTagNo(tvb, offset)) {
- case 0:
- offset = fRealTag (tvb, subtree, offset, "reference-value: ");
- break;
- case 1:
- offset = fBitStringTagVS (tvb, subtree, offset,
- "status-flags: ", BACnetStatusFlags);
- break;
- case 2:
- offset = fRealTag (tvb, subtree, offset, "setpoint-value: ");
- break;
- case 3:
- offset = fRealTag (tvb, subtree, offset, "error-limit: ");
- lastoffset = offset;
- break;
- default:
- break;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- break;
- case 5: /* out-of-range */
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- switch (fTagNo(tvb, offset)) {
- case 0:
- offset = fRealTag (tvb, subtree, offset, "exceeding-value: ");
- break;
- case 1:
- offset = fBitStringTagVS (tvb, subtree, offset,
- "status-flags: ", BACnetStatusFlags);
- break;
- case 2:
- offset = fRealTag (tvb, subtree, offset, "deadband: ");
- break;
- case 3:
- offset = fRealTag (tvb, subtree, offset, "exceeded-limit: ");
- lastoffset = offset;
- break;
- default:
- break;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- break;
- case 6:
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- offset =fBACnetPropertyValue (tvb,pinfo,subtree,offset);
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- break;
- case 7: /* buffer-ready */
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- switch (fTagNo(tvb, offset)) {
- case 0:
- offset = fObjectIdentifier (tvb, pinfo, subtree, offset); /* buffer-device */
- break;
- case 1:
- offset = fObjectIdentifier (tvb, pinfo, subtree, offset); /* buffer-object */
- break;
- case 2:
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- offset = fDateTime (tvb, subtree, offset, "previous-notification: ");
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- break;
- case 3:
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- offset = fDateTime (tvb, subtree, offset, "current-notification: ");
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- lastoffset = offset;
- break;
- default:
- break;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- break;
- case 8: /* change-of-life-safety */
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- switch (fTagNo(tvb, offset)) {
- case 0:
- offset = fEnumeratedTagSplit (tvb, subtree, offset,
- "new-state: ", BACnetLifeSafetyState, 256);
- break;
- case 1:
- offset = fEnumeratedTagSplit (tvb, subtree, offset,
- "new-mode: ", BACnetLifeSafetyMode, 256);
- break;
- case 2:
- offset = fBitStringTagVS (tvb, subtree, offset,
- "status-flags: ", BACnetStatusFlags);
- break;
- case 3:
- offset = fEnumeratedTagSplit (tvb, subtree, offset,
- "operation-expected: ", BACnetLifeSafetyOperation, 64);
- lastoffset = offset;
- break;
- default:
- break;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- break;
- case 9: /* extended */
- while (tvb_reported_length_remaining(tvb, offset)) {
- lastoffset = offset;
- switch (fTagNo(tvb, offset)) {
- case 0:
- offset = fVendorIdentifier (tvb, pinfo, subtree, offset);
- break;
- case 1:
- offset = fUnsignedTag (tvb, subtree, offset,
- "extended-event-type: ");
- break;
- case 2: /* parameters */
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- offset = fApplicationTypes(tvb, pinfo, subtree, offset, "parameters: ");
- offset = fDeviceObjectPropertyValue(tvb, pinfo, subtree, offset);
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- lastoffset = offset;
- break;
- default:
- break;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- break;
- case 10: /* buffer ready */
- while (tvb_reported_length_remaining(tvb, offset)) {
- lastoffset = offset;
- switch (fTagNo(tvb, offset)) {
- case 0: /* buffer-property */
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- offset = fDeviceObjectPropertyReference (tvb, pinfo, subtree, offset);
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- break;
- case 1:
- offset = fUnsignedTag (tvb, subtree, offset,
- "previous-notification: ");
- break;
- case 2:
- offset = fUnsignedTag (tvb, subtree, offset,
- "current-notification: ");
- lastoffset = offset;
- break;
- default:
- break;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- break;
- case 11: /* unsigned range */
- while (tvb_reported_length_remaining(tvb, offset)) {
- lastoffset = offset;
- switch (fTagNo(tvb, offset)) {
- case 0:
- offset = fUnsignedTag (tvb, subtree, offset,
- "exceeding-value: ");
- break;
- case 1:
- offset = fBitStringTagVS (tvb, subtree, offset,
- "status-flags: ", BACnetStatusFlags);
- break;
- case 2:
- offset = fUnsignedTag (tvb, subtree, offset,
- "exceeded-limit: ");
- lastoffset = offset;
- break;
- default:
- break;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- break;
- /* todo: add new parameters here ... */
- default:
- offset = fAbstractSyntaxNType(tvb, pinfo, subtree, offset);
- break;
- }
-
- /* Closing tag for parameter choice */
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
-
- return offset;
+ guint lastoffset = offset;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ proto_tree *subtree = tree;
+ proto_item *tt;
+
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ tt = proto_tree_add_text(subtree, tvb, offset, 0, "notification parameters (%d) %s",
+ tag_no, val_to_str(tag_no, BACnetEventType, "invalid type"));
+ subtree = proto_item_add_subtree(tt, ett_bacapp_value);
+ /* Opening tag for parameter choice */
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+
+ switch (tag_no) {
+ case 0: /* change-of-bitstring */
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ switch (fTagNo(tvb, offset)) {
+ case 0:
+ offset = fBitStringTag (tvb, subtree, offset,
+ "referenced-bitstring: ");
+ break;
+ case 1:
+ offset = fBitStringTagVS (tvb, subtree, offset,
+ "status-flags: ", BACnetStatusFlags);
+ lastoffset = offset;
+ break;
+ default:
+ break;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ break;
+ case 1: /* change-of-state */
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ switch (fTagNo(tvb, offset)) {
+ case 0:
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ offset = fBACnetPropertyStates(tvb, pinfo, subtree, offset);
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ case 1:
+ offset = fBitStringTagVS (tvb, subtree, offset,
+ "status-flags: ", BACnetStatusFlags);
+ lastoffset = offset;
+ break;
+ default:
+ break;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ break;
+ case 2: /* change-of-value */
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ switch (fTagNo(tvb, offset)) {
+ case 0:
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ switch (fTagNo(tvb, offset)) {
+ case 0:
+ offset = fBitStringTag (tvb, subtree, offset,
+ "changed-bits: ");
+ break;
+ case 1:
+ offset = fRealTag (tvb, subtree, offset,
+ "changed-value: ");
+ break;
+ default:
+ break;
+ }
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ case 1:
+ offset = fBitStringTagVS (tvb, subtree, offset,
+ "status-flags: ", BACnetStatusFlags);
+ lastoffset = offset;
+ break;
+ default:
+ break;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ break;
+ case 3: /* command-failure */
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ switch (fTagNo(tvb, offset)) {
+ case 0: /* "command-value: " */
+ /* from BACnet Table 13-3,
+ Standard Object Property Values Returned in Notifications */
+ propertyIdentifier = 85; /* PRESENT_VALUE */
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ offset = fAbstractSyntaxNType (tvb, pinfo, subtree, offset);
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ case 1:
+ offset = fBitStringTagVS (tvb, subtree, offset,
+ "status-flags: ", BACnetStatusFlags);
+ break;
+ case 2: /* "feedback-value: " */
+ propertyIdentifier = 40; /* FEEDBACK_VALUE */
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ offset = fAbstractSyntaxNType (tvb, pinfo, subtree, offset);
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ lastoffset = offset;
+ break;
+ default:
+ break;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ break;
+ case 4: /* floating-limit */
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ switch (fTagNo(tvb, offset)) {
+ case 0:
+ offset = fRealTag (tvb, subtree, offset, "reference-value: ");
+ break;
+ case 1:
+ offset = fBitStringTagVS (tvb, subtree, offset,
+ "status-flags: ", BACnetStatusFlags);
+ break;
+ case 2:
+ offset = fRealTag (tvb, subtree, offset, "setpoint-value: ");
+ break;
+ case 3:
+ offset = fRealTag (tvb, subtree, offset, "error-limit: ");
+ lastoffset = offset;
+ break;
+ default:
+ break;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ break;
+ case 5: /* 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 = fRealTag (tvb, subtree, offset, "exceeding-value: ");
+ break;
+ case 1:
+ offset = fBitStringTagVS (tvb, subtree, offset,
+ "status-flags: ", BACnetStatusFlags);
+ break;
+ case 2:
+ offset = fRealTag (tvb, subtree, offset, "deadband: ");
+ break;
+ case 3:
+ offset = fRealTag (tvb, subtree, offset, "exceeded-limit: ");
+ lastoffset = offset;
+ break;
+ default:
+ break;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ break;
+ case 6:
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ offset =fBACnetPropertyValue (tvb,pinfo,subtree,offset);
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ break;
+ case 7: /* buffer-ready */
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ switch (fTagNo(tvb, offset)) {
+ case 0:
+ offset = fObjectIdentifier (tvb, pinfo, subtree, offset); /* buffer-device */
+ break;
+ case 1:
+ offset = fObjectIdentifier (tvb, pinfo, subtree, offset); /* buffer-object */
+ break;
+ case 2:
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ offset = fDateTime (tvb, subtree, offset, "previous-notification: ");
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ case 3:
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ offset = fDateTime (tvb, subtree, offset, "current-notification: ");
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ lastoffset = offset;
+ break;
+ default:
+ break;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ break;
+ case 8: /* change-of-life-safety */
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ switch (fTagNo(tvb, offset)) {
+ case 0:
+ offset = fEnumeratedTagSplit (tvb, subtree, offset,
+ "new-state: ", BACnetLifeSafetyState, 256);
+ break;
+ case 1:
+ offset = fEnumeratedTagSplit (tvb, subtree, offset,
+ "new-mode: ", BACnetLifeSafetyMode, 256);
+ break;
+ case 2:
+ offset = fBitStringTagVS (tvb, subtree, offset,
+ "status-flags: ", BACnetStatusFlags);
+ break;
+ case 3:
+ offset = fEnumeratedTagSplit (tvb, subtree, offset,
+ "operation-expected: ", BACnetLifeSafetyOperation, 64);
+ lastoffset = offset;
+ break;
+ default:
+ break;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ break;
+ case 9: /* extended */
+ while (tvb_reported_length_remaining(tvb, offset) > 0) {
+ lastoffset = offset;
+ switch (fTagNo(tvb, offset)) {
+ case 0:
+ offset = fVendorIdentifier (tvb, pinfo, subtree, offset);
+ break;
+ case 1:
+ offset = fUnsignedTag (tvb, subtree, offset,
+ "extended-event-type: ");
+ break;
+ case 2: /* parameters */
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ offset = fApplicationTypes(tvb, pinfo, subtree, offset, "parameters: ");
+ offset = fDeviceObjectPropertyValue(tvb, pinfo, subtree, offset);
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ lastoffset = offset;
+ break;
+ default:
+ break;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ break;
+ case 10: /* buffer ready */
+ while (tvb_reported_length_remaining(tvb, offset) > 0) {
+ lastoffset = offset;
+ switch (fTagNo(tvb, offset)) {
+ case 0: /* buffer-property */
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ offset = fDeviceObjectPropertyReference (tvb, pinfo, subtree, offset);
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ case 1:
+ offset = fUnsignedTag (tvb, subtree, offset,
+ "previous-notification: ");
+ break;
+ case 2:
+ offset = fUnsignedTag (tvb, subtree, offset,
+ "current-notification: ");
+ lastoffset = offset;
+ break;
+ default:
+ break;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ break;
+ case 11: /* unsigned range */
+ while (tvb_reported_length_remaining(tvb, offset) > 0) {
+ lastoffset = offset;
+ switch (fTagNo(tvb, offset)) {
+ case 0:
+ offset = fUnsignedTag (tvb, subtree, offset,
+ "exceeding-value: ");
+ break;
+ case 1:
+ offset = fBitStringTagVS (tvb, subtree, offset,
+ "status-flags: ", BACnetStatusFlags);
+ break;
+ case 2:
+ offset = fUnsignedTag (tvb, subtree, offset,
+ "exceeded-limit: ");
+ lastoffset = offset;
+ break;
+ default:
+ break;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ break;
+ /* todo: add new parameters here ... */
+ default:
+ offset = fAbstractSyntaxNType(tvb, pinfo, subtree, offset);
+ break;
+ }
+
+ /* Closing tag for parameter choice */
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+
+ return offset;
}
static guint
fEventParameter (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = offset;
- guint8 tag_no, tag_info;
- guint32 lvt;
- proto_tree *subtree = tree;
- proto_item *tt;
-
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- tt = proto_tree_add_text(subtree, tvb, offset, 0, "event parameters (%d) %s",
- tag_no, val_to_str(tag_no, BACnetEventType, "invalid type"));
- subtree = proto_item_add_subtree(tt, ett_bacapp_value);
- /* Opening tag for parameter choice */
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
-
- switch (tag_no) {
- case 0: /* change-of-bitstring */
- while ((tvb_reported_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_closing(tag_info)) {
- break;
- }
- switch (tag_no) {
- case 0:
- offset = fTimeSpan (tvb, subtree, offset, "Time Delay");
- break;
- case 1:
- offset = fBitStringTag (tvb, subtree, offset, "bitmask: ");
- break;
- case 2: /* SEQUENCE OF BIT STRING */
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- while ((tvb_reported_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_closing(tag_info)) {
- break;
- }
- offset = fBitStringTag(tvb, subtree, offset,
- "bitstring value: ");
- }
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- break;
- default:
- break;
- }
- }
- break;
- case 1: /* change-of-state */
- while ((tvb_reported_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_closing(tag_info)) {
- break;
- }
- switch (tag_no) {
- case 0:
- offset = fTimeSpan (tvb, subtree, offset, "Time Delay");
- break;
- case 1: /* SEQUENCE OF BACnetPropertyStates */
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- while ((tvb_reported_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_closing(tag_info)) {
- break;
- }
- offset = fBACnetPropertyStates(tvb, pinfo, subtree, offset);
- }
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- break;
- default:
- break;
- }
- }
- break;
- case 2: /* change-of-value */
- while ((tvb_reported_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- switch (fTagNo(tvb, offset)) {
- case 0:
- offset = fTimeSpan (tvb, subtree, offset, "Time Delay");
- break;
- case 1: /* don't loop it, it's a CHOICE */
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- switch (fTagNo(tvb, offset)) {
- case 0:
- offset = fBitStringTag (tvb, subtree, offset, "bitmask: ");
- break;
- case 1:
- offset = fRealTag (tvb, subtree, offset,
- "referenced Property Increment: ");
- break;
- default:
- break;
- }
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- break;
- default:
- break;
- }
- }
- break;
- case 3: /* command-failure */
- while ((tvb_reported_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- tag_no = fTagNo(tvb, offset);
- switch (tag_no) {
- case 0:
- offset = fTimeSpan (tvb, subtree, offset, "Time Delay");
- break;
- case 1:
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- offset = fDeviceObjectPropertyReference (tvb,pinfo,subtree,offset);
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- break;
- default:
- break;
- }
- }
- break;
- case 4: /* floating-limit */
- while ((tvb_reported_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_closing(tag_info)) {
- break;
- }
- switch (tag_no) {
- case 0:
- offset = fTimeSpan (tvb, subtree, offset, "Time Delay");
- break;
- case 1:
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- offset = fDeviceObjectPropertyReference (tvb,pinfo,subtree,offset);
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- break;
- case 2:
- offset = fRealTag (tvb, subtree, offset, "low diff limit: ");
- break;
- case 3:
- offset = fRealTag (tvb, subtree, offset, "high diff limit: ");
- break;
- case 4:
- offset = fRealTag (tvb, subtree, offset, "deadband: ");
- break;
- default:
- break;
- }
- }
- break;
- case 5: /* out-of-range */
- while ((tvb_reported_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- switch (fTagNo(tvb, offset)) {
- case 0:
- offset = fTimeSpan (tvb, subtree, offset, "Time Delay");
- break;
- case 1:
- offset = fRealTag (tvb, subtree, offset, "low limit: ");
- break;
- case 2:
- offset = fRealTag (tvb, subtree, offset, "high limit: ");
- break;
- case 3:
- offset = fRealTag (tvb, subtree, offset, "deadband: ");
- break;
- default:
- break;
- }
- }
- break;
- /* deprectated
- case 6:
- offset = fBACnetPropertyValue (tvb,pinfo,tree,offset);
- break;
+ guint lastoffset = offset;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ proto_tree *subtree = tree;
+ proto_item *tt;
+
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ tt = proto_tree_add_text(subtree, tvb, offset, 0, "event parameters (%d) %s",
+ tag_no, val_to_str(tag_no, BACnetEventType, "invalid type"));
+ subtree = proto_item_add_subtree(tt, ett_bacapp_value);
+ /* Opening tag for parameter choice */
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+
+ switch (tag_no) {
+ case 0: /* change-of-bitstring */
+ while ((tvb_reported_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_is_closing(tag_info)) {
+ break;
+ }
+ switch (tag_no) {
+ case 0:
+ offset = fTimeSpan (tvb, subtree, offset, "Time Delay");
+ break;
+ case 1:
+ offset = fBitStringTag (tvb, subtree, offset, "bitmask: ");
+ break;
+ case 2: /* SEQUENCE OF BIT STRING */
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ while ((tvb_reported_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_is_closing(tag_info)) {
+ break;
+ }
+ offset = fBitStringTag(tvb, subtree, offset,
+ "bitstring value: ");
+ }
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ default:
+ break;
+ }
+ }
+ break;
+ case 1: /* change-of-state */
+ while ((tvb_reported_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_is_closing(tag_info)) {
+ break;
+ }
+ switch (tag_no) {
+ case 0:
+ offset = fTimeSpan (tvb, subtree, offset, "Time Delay");
+ break;
+ case 1: /* SEQUENCE OF BACnetPropertyStates */
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ while ((tvb_reported_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_is_closing(tag_info)) {
+ break;
+ }
+ offset = fBACnetPropertyStates(tvb, pinfo, subtree, offset);
+ }
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ default:
+ break;
+ }
+ }
+ break;
+ case 2: /* change-of-value */
+ while ((tvb_reported_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ switch (fTagNo(tvb, offset)) {
+ case 0:
+ offset = fTimeSpan (tvb, subtree, offset, "Time Delay");
+ break;
+ case 1: /* don't loop it, it's a CHOICE */
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ switch (fTagNo(tvb, offset)) {
+ case 0:
+ offset = fBitStringTag (tvb, subtree, offset, "bitmask: ");
+ break;
+ case 1:
+ offset = fRealTag (tvb, subtree, offset,
+ "referenced Property Increment: ");
+ break;
+ default:
+ break;
+ }
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ default:
+ break;
+ }
+ }
+ break;
+ case 3: /* command-failure */
+ while ((tvb_reported_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ tag_no = fTagNo(tvb, offset);
+ switch (tag_no) {
+ case 0:
+ offset = fTimeSpan (tvb, subtree, offset, "Time Delay");
+ break;
+ case 1:
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ offset = fDeviceObjectPropertyReference (tvb,pinfo,subtree,offset);
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ default:
+ break;
+ }
+ }
+ break;
+ case 4: /* floating-limit */
+ while ((tvb_reported_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_is_closing(tag_info)) {
+ break;
+ }
+ switch (tag_no) {
+ case 0:
+ offset = fTimeSpan (tvb, subtree, offset, "Time Delay");
+ break;
+ case 1:
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ offset = fDeviceObjectPropertyReference (tvb,pinfo,subtree,offset);
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ case 2:
+ offset = fRealTag (tvb, subtree, offset, "low diff limit: ");
+ break;
+ case 3:
+ offset = fRealTag (tvb, subtree, offset, "high diff limit: ");
+ break;
+ case 4:
+ offset = fRealTag (tvb, subtree, offset, "deadband: ");
+ break;
+ default:
+ break;
+ }
+ }
+ break;
+ case 5: /* out-of-range */
+ while ((tvb_reported_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ switch (fTagNo(tvb, offset)) {
+ case 0:
+ offset = fTimeSpan (tvb, subtree, offset, "Time Delay");
+ break;
+ case 1:
+ offset = fRealTag (tvb, subtree, offset, "low limit: ");
+ break;
+ case 2:
+ offset = fRealTag (tvb, subtree, offset, "high limit: ");
+ break;
+ case 3:
+ offset = fRealTag (tvb, subtree, offset, "deadband: ");
+ break;
+ default:
+ break;
+ }
+ }
+ break;
+ /* deprectated
+ case 6:
+ offset = fBACnetPropertyValue (tvb,pinfo,tree,offset);
+ break;
*/
- case 7: /* buffer-ready */
- /* deprecated
- while ((tvb_reported_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) {
- lastoffset = offset;
- switch (fTagNo(tvb, offset)) {
- case 0:
- offset = fUnsignedTag (tvb,tree,offset,"notification threshold");
- break;
- case 1:
- offset = fUnsignedTag (tvb,tree,offset,
- "previous notification count: ");
- break;
- default:
- return offset;
- }
- }
- */
- break;
- case 8: /* change-of-life-safety */
- while ((tvb_reported_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- switch (fTagNo(tvb, offset)) {
- case 0:
- offset = fTimeSpan (tvb, subtree, offset, "Time Delay");
- break;
- case 1:
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- while ((tvb_reported_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_closing(tag_info)) {
- break;
- }
- offset = fEnumeratedTagSplit (tvb, subtree, offset,
- "life safety alarm value: ", BACnetLifeSafetyState, 256);
- }
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- break;
- case 2:
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- while ((tvb_reported_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_closing(tag_info)) {
- break;
- }
- offset = fEnumeratedTagSplit (tvb, subtree, offset,
- "alarm value: ", BACnetLifeSafetyState, 256);
- }
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- break;
- case 3:
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- offset = fDeviceObjectPropertyReference (tvb, pinfo, subtree, offset);
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- break;
- default:
- break;
- }
- }
- break;
- case 9: /* extended */
- while ((tvb_reported_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- switch (fTagNo(tvb, offset)) {
- case 0:
- offset = fVendorIdentifier (tvb, pinfo, tree, offset);
- break;
- case 1:
- offset = fUnsignedTag (tvb, tree, offset,
- "extended-event-type: ");
- break;
- case 2: /* parameters */
- offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &tag_info, &lvt);
- offset = fApplicationTypes(tvb, pinfo, tree, offset, "parameters: ");
- offset = fDeviceObjectPropertyValue(tvb, pinfo, tree, offset);
- offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &tag_info, &lvt);
- lastoffset = offset;
- break;
- default:
- break;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- break;
- case 10: /* buffer-ready */
- while ((tvb_reported_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- switch (fTagNo(tvb, offset)) {
- case 0:
- offset = fUnsignedTag (tvb, subtree, offset,
- "notification-threshold: ");
- break;
- case 1:
- offset = fUnsignedTag (tvb, subtree, offset,
- "previous-notification-count: ");
- break;
- default:
- break;
- }
- }
- break;
- case 11: /* unsigned-range */
- while ((tvb_reported_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- switch (fTagNo(tvb, offset)) {
- case 0:
- offset = fTimeSpan (tvb, tree, offset, "Time Delay");
- break;
- case 1:
- offset = fUnsignedTag (tvb, tree, offset,
- "low-limit: ");
- break;
- case 2:
- offset = fUnsignedTag (tvb, tree, offset,
- "high-limit: ");
- break;
- default:
- break;
- }
- }
- break;
- /* todo: add new event-parameter cases here */
- default:
- break;
- }
-
- /* Closing tag for parameter choice */
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- return offset;
+ case 7: /* buffer-ready */
+#if 0
+ /* deprecated */
+ while ((tvb_reported_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) {
+ lastoffset = offset;
+ switch (fTagNo(tvb, offset)) {
+ case 0:
+ offset = fUnsignedTag (tvb,tree,offset,"notification threshold");
+ break;
+ case 1:
+ offset = fUnsignedTag (tvb,tree,offset,
+ "previous notification count: ");
+ break;
+ default:
+ return offset;
+ }
+ }
+#endif
+ break;
+ case 8: /* change-of-life-safety */
+ while ((tvb_reported_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ switch (fTagNo(tvb, offset)) {
+ case 0:
+ offset = fTimeSpan (tvb, subtree, offset, "Time Delay");
+ break;
+ case 1:
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ while ((tvb_reported_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_is_closing(tag_info)) {
+ break;
+ }
+ offset = fEnumeratedTagSplit (tvb, subtree, offset,
+ "life safety alarm value: ", BACnetLifeSafetyState, 256);
+ }
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ case 2:
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ while ((tvb_reported_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_is_closing(tag_info)) {
+ break;
+ }
+ offset = fEnumeratedTagSplit (tvb, subtree, offset,
+ "alarm value: ", BACnetLifeSafetyState, 256);
+ }
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ case 3:
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ offset = fDeviceObjectPropertyReference (tvb, pinfo, subtree, offset);
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ default:
+ break;
+ }
+ }
+ break;
+ case 9: /* extended */
+ while ((tvb_reported_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ switch (fTagNo(tvb, offset)) {
+ case 0:
+ offset = fVendorIdentifier (tvb, pinfo, tree, offset);
+ break;
+ case 1:
+ offset = fUnsignedTag (tvb, tree, offset,
+ "extended-event-type: ");
+ break;
+ case 2: /* parameters */
+ offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ offset = fApplicationTypes(tvb, pinfo, tree, offset, "parameters: ");
+ offset = fDeviceObjectPropertyValue(tvb, pinfo, tree, offset);
+ offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ lastoffset = offset;
+ break;
+ default:
+ break;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ break;
+ case 10: /* buffer-ready */
+ while ((tvb_reported_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ switch (fTagNo(tvb, offset)) {
+ case 0:
+ offset = fUnsignedTag (tvb, subtree, offset,
+ "notification-threshold: ");
+ break;
+ case 1:
+ offset = fUnsignedTag (tvb, subtree, offset,
+ "previous-notification-count: ");
+ break;
+ default:
+ break;
+ }
+ }
+ break;
+ case 11: /* unsigned-range */
+ while ((tvb_reported_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ switch (fTagNo(tvb, offset)) {
+ case 0:
+ offset = fTimeSpan (tvb, tree, offset, "Time Delay");
+ break;
+ case 1:
+ offset = fUnsignedTag (tvb, tree, offset,
+ "low-limit: ");
+ break;
+ case 2:
+ offset = fUnsignedTag (tvb, tree, offset,
+ "high-limit: ");
+ break;
+ default:
+ break;
+ }
+ }
+ break;
+ /* todo: add new event-parameter cases here */
+ default:
+ break;
+ }
+
+ /* Closing tag for parameter choice */
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ return offset;
}
static guint
fEventLogRecord(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0;
- guint8 tag_no, tag_info;
- guint32 lvt;
- proto_tree *subtree = tree;
- proto_item *tt;
-
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- switch (fTagNo(tvb, offset)) {
- case 0: /* timestamp */
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- offset = fDate (tvb,tree,offset,"Date: ");
- offset = fTime (tvb,tree,offset,"Time: ");
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- break;
- case 1: /* logDatum: don't loop, it's a CHOICE */
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- switch (fTagNo(tvb, offset)) {
- case 0: /* logStatus */ /* Changed this to BitString per BACnet Spec. */
- offset = fBitStringTagVS(tvb, tree, offset, "log status:", BACnetLogStatus);
- break;
- case 1: /* todo: move this to new method fConfirmedEventNotificationRequestTag... */
- tt = proto_tree_add_text(tree, tvb, offset, 1, "notification: ");
- subtree = proto_item_add_subtree(tt, ett_bacapp_value);
- offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- offset = fConfirmedEventNotificationRequest(tvb, pinfo, subtree, offset);
- offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- break;
- case 2:
- offset = fRealTag (tvb, tree, offset, "time-change: ");
- break;
- default:
- return offset;
- }
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- break;
- default:
- return offset;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint lastoffset = 0;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ proto_tree *subtree = tree;
+ proto_item *tt;
+
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ switch (fTagNo(tvb, offset)) {
+ case 0: /* timestamp */
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ offset = fDate (tvb,tree,offset,"Date: ");
+ offset = fTime (tvb,tree,offset,"Time: ");
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ case 1: /* logDatum: don't loop, it's a CHOICE */
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ switch (fTagNo(tvb, offset)) {
+ case 0: /* logStatus */ /* Changed this to BitString per BACnet Spec. */
+ offset = fBitStringTagVS(tvb, tree, offset, "log status:", BACnetLogStatus);
+ break;
+ case 1: /* todo: move this to new method fConfirmedEventNotificationRequestTag... */
+ tt = proto_tree_add_text(tree, tvb, offset, 1, "notification: ");
+ subtree = proto_item_add_subtree(tt, ett_bacapp_value);
+ offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ offset = fConfirmedEventNotificationRequest(tvb, pinfo, subtree, offset);
+ offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ case 2:
+ offset = fRealTag (tvb, tree, offset, "time-change: ");
+ break;
+ default:
+ return offset;
+ }
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ default:
+ return offset;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fLogRecord (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0;
- guint8 tag_no, tag_info;
- guint32 lvt;
-
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- switch (fTagNo(tvb, offset)) {
- case 0: /* timestamp */
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- offset = fDate (tvb,tree,offset,"Date: ");
- offset = fTime (tvb,tree,offset,"Time: ");
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- break;
- case 1: /* logDatum: don't loop, it's a CHOICE */
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- switch (fTagNo(tvb, offset)) {
- case 0: /* logStatus */ /* Changed this to BitString per BACnet Spec. */
- offset = fBitStringTagVS(tvb, tree, offset, "log status:", BACnetLogStatus);
- break;
- case 1:
- offset = fBooleanTag (tvb, tree, offset, "boolean-value: ");
- break;
- case 2:
- offset = fRealTag (tvb, tree, offset, "real value: ");
- break;
- case 3:
- offset = fUnsignedTag (tvb, tree, offset, "enum value: ");
- break;
- case 4:
- offset = fUnsignedTag (tvb, tree, offset, "unsigned value: ");
- break;
- case 5:
- offset = fSignedTag (tvb, tree, offset, "signed value: ");
- break;
- case 6:
- offset = fBitStringTag (tvb, tree, offset, "bitstring value: ");
- break;
- case 7:
- offset = fNullTag(tvb, tree, offset, "null value: ");
- break;
- case 8:
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- offset = fError (tvb, pinfo, tree, offset);
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- break;
- case 9:
- offset = fRealTag (tvb, tree, offset, "time change: ");
- break;
- case 10: /* any Value */
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- offset = fAbstractSyntaxNType (tvb, pinfo, tree, offset);
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- break;
- default:
- return offset;
- }
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- break;
- case 2:
- /* Changed this to BitString per BACnet Spec. */
- offset = fBitStringTagVS(tvb, tree, offset, "Status Flags:", BACnetStatusFlags);
- break;
- default:
- return offset;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint lastoffset = 0;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ switch (fTagNo(tvb, offset)) {
+ case 0: /* timestamp */
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ offset = fDate (tvb,tree,offset,"Date: ");
+ offset = fTime (tvb,tree,offset,"Time: ");
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ case 1: /* logDatum: don't loop, it's a CHOICE */
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ switch (fTagNo(tvb, offset)) {
+ case 0: /* logStatus */ /* Changed this to BitString per BACnet Spec. */
+ offset = fBitStringTagVS(tvb, tree, offset, "log status:", BACnetLogStatus);
+ break;
+ case 1:
+ offset = fBooleanTag (tvb, tree, offset, "boolean-value: ");
+ break;
+ case 2:
+ offset = fRealTag (tvb, tree, offset, "real value: ");
+ break;
+ case 3:
+ offset = fUnsignedTag (tvb, tree, offset, "enum value: ");
+ break;
+ case 4:
+ offset = fUnsignedTag (tvb, tree, offset, "unsigned value: ");
+ break;
+ case 5:
+ offset = fSignedTag (tvb, tree, offset, "signed value: ");
+ break;
+ case 6:
+ offset = fBitStringTag (tvb, tree, offset, "bitstring value: ");
+ break;
+ case 7:
+ offset = fNullTag(tvb, tree, offset, "null value: ");
+ break;
+ case 8:
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ offset = fError (tvb, pinfo, tree, offset);
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ case 9:
+ offset = fRealTag (tvb, tree, offset, "time change: ");
+ break;
+ case 10: /* any Value */
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ offset = fAbstractSyntaxNType (tvb, pinfo, tree, offset);
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ default:
+ return offset;
+ }
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ case 2:
+ /* Changed this to BitString per BACnet Spec. */
+ offset = fBitStringTagVS(tvb, tree, offset, "Status Flags:", BACnetStatusFlags);
+ break;
+ default:
+ return offset;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fLogMultipleRecord (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0;
- guint8 tag_no, tag_info;
- guint32 lvt;
-
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- switch (fTagNo(tvb, offset)) {
- case 0: /* timestamp */
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- offset = fDate (tvb,tree,offset,"Date: ");
- offset = fTime (tvb,tree,offset,"Time: ");
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- break;
- case 1: /* logData: don't loop, it's a CHOICE */
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- switch (fTagNo(tvb, offset)) {
- case 0: /* logStatus */ /* Changed this to BitString per BACnet Spec. */
- offset = fBitStringTagVS(tvb, tree, offset, "log status:", BACnetLogStatus);
- break;
- case 1: /* log-data: SEQUENCE OF CHOICE */
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- while (tvb_reported_length_remaining(tvb, offset) && (offset != lastoffset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_closing(tag_info)) {
- lastoffset = offset;
- break;
- }
- switch (tag_no) {
- case 0:
- offset = fBooleanTag (tvb, tree, offset, "boolean-value: ");
- break;
- case 1:
- offset = fRealTag (tvb, tree, offset, "real value: ");
- break;
- case 2:
- offset = fUnsignedTag (tvb, tree, offset, "enum value: ");
- break;
- case 3:
- offset = fUnsignedTag (tvb, tree, offset, "unsigned value: ");
- break;
- case 4:
- offset = fSignedTag (tvb, tree, offset, "signed value: ");
- break;
- case 5:
- offset = fBitStringTag (tvb, tree, offset, "bitstring value: ");
- break;
- case 6:
- offset = fNullTag(tvb, tree, offset, "null value: ");
- break;
- case 7:
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- offset = fError (tvb, pinfo, tree, offset);
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- break;
- case 8: /* any Value */
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- offset = fAbstractSyntaxNType (tvb, pinfo, tree, offset);
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- break;
- default:
- return offset;
- }
- }
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- break;
- case 2:
- offset = fRealTag (tvb, tree, offset, "time-change: ");
- break;
- default:
- return offset;
- }
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- break;
- default:
- return offset;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint lastoffset = 0;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ switch (fTagNo(tvb, offset)) {
+ case 0: /* timestamp */
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ offset = fDate (tvb,tree,offset,"Date: ");
+ offset = fTime (tvb,tree,offset,"Time: ");
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ case 1: /* logData: don't loop, it's a CHOICE */
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ switch (fTagNo(tvb, offset)) {
+ case 0: /* logStatus */ /* Changed this to BitString per BACnet Spec. */
+ offset = fBitStringTagVS(tvb, tree, offset, "log status:", BACnetLogStatus);
+ break;
+ case 1: /* log-data: SEQUENCE OF CHOICE */
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ while ((tvb_reported_length_remaining(tvb, offset) > 0) && (offset != lastoffset)) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_is_closing(tag_info)) {
+ lastoffset = offset;
+ break;
+ }
+ switch (tag_no) {
+ case 0:
+ offset = fBooleanTag (tvb, tree, offset, "boolean-value: ");
+ break;
+ case 1:
+ offset = fRealTag (tvb, tree, offset, "real value: ");
+ break;
+ case 2:
+ offset = fUnsignedTag (tvb, tree, offset, "enum value: ");
+ break;
+ case 3:
+ offset = fUnsignedTag (tvb, tree, offset, "unsigned value: ");
+ break;
+ case 4:
+ offset = fSignedTag (tvb, tree, offset, "signed value: ");
+ break;
+ case 5:
+ offset = fBitStringTag (tvb, tree, offset, "bitstring value: ");
+ break;
+ case 6:
+ offset = fNullTag(tvb, tree, offset, "null value: ");
+ break;
+ case 7:
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ offset = fError (tvb, pinfo, tree, offset);
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ case 8: /* any Value */
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ offset = fAbstractSyntaxNType (tvb, pinfo, tree, offset);
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ default:
+ return offset;
+ }
+ }
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ case 2:
+ offset = fRealTag (tvb, tree, offset, "time-change: ");
+ break;
+ default:
+ return offset;
+ }
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ default:
+ return offset;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fConfirmedEventNotificationRequest (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0;
- guint8 tag_no, tag_info;
- guint32 lvt;
-
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_closing(tag_info)) {
- lastoffset = offset;
- break;
- }
-
- switch (tag_no) {
- case 0: /* ProcessId */
- offset = fProcessId (tvb,tree,offset);
- break;
- case 1: /* initiating ObjectId */
- offset = fObjectIdentifier (tvb, pinfo, tree, offset);
- break;
- case 2: /* event ObjectId */
- offset = fObjectIdentifier (tvb, pinfo, tree, offset);
- break;
- case 3: /* time stamp */
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- offset = fTimeStamp (tvb, tree, offset, NULL);
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- break;
- case 4: /* notificationClass */
- offset = fUnsignedTag (tvb, tree, offset, "Notification Class: ");
- break;
- case 5: /* Priority */
- offset = fUnsignedTag (tvb, tree, offset, "Priority: ");
- break;
- case 6: /* EventType */
- offset = fEnumeratedTagSplit (tvb, tree, offset,
- "Event Type: ", BACnetEventType, 64);
- break;
- case 7: /* messageText */
- offset = fCharacterString (tvb, tree, offset, "message Text: ");
- break;
- case 8: /* NotifyType */
- offset = fEnumeratedTag (tvb, tree, offset,
- "Notify Type: ", BACnetNotifyType);
- break;
- case 9: /* ackRequired */
- offset = fBooleanTag (tvb, tree, offset, "ack Required: ");
- break;
- case 10: /* fromState */
- offset = fEnumeratedTagSplit (tvb, tree, offset,
- "from State: ", BACnetEventState, 64);
- break;
- case 11: /* toState */
- offset = fEnumeratedTagSplit (tvb, tree, offset,
- "to State: ", BACnetEventState, 64);
- break;
- case 12: /* NotificationParameters */
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- offset = fNotificationParameters (tvb, pinfo, tree, offset);
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- break;
- default:
- break;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint lastoffset = 0;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_is_closing(tag_info)) {
+ lastoffset = offset;
+ break;
+ }
+
+ switch (tag_no) {
+ case 0: /* ProcessId */
+ offset = fProcessId (tvb,tree,offset);
+ break;
+ case 1: /* initiating ObjectId */
+ offset = fObjectIdentifier (tvb, pinfo, tree, offset);
+ break;
+ case 2: /* event ObjectId */
+ offset = fObjectIdentifier (tvb, pinfo, tree, offset);
+ break;
+ case 3: /* time stamp */
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ offset = fTimeStamp (tvb, tree, offset, NULL);
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ case 4: /* notificationClass */
+ offset = fUnsignedTag (tvb, tree, offset, "Notification Class: ");
+ break;
+ case 5: /* Priority */
+ offset = fUnsignedTag (tvb, tree, offset, "Priority: ");
+ break;
+ case 6: /* EventType */
+ offset = fEnumeratedTagSplit (tvb, tree, offset,
+ "Event Type: ", BACnetEventType, 64);
+ break;
+ case 7: /* messageText */
+ offset = fCharacterString (tvb, tree, offset, "message Text: ");
+ break;
+ case 8: /* NotifyType */
+ offset = fEnumeratedTag (tvb, tree, offset,
+ "Notify Type: ", BACnetNotifyType);
+ break;
+ case 9: /* ackRequired */
+ offset = fBooleanTag (tvb, tree, offset, "ack Required: ");
+ break;
+ case 10: /* fromState */
+ offset = fEnumeratedTagSplit (tvb, tree, offset,
+ "from State: ", BACnetEventState, 64);
+ break;
+ case 11: /* toState */
+ offset = fEnumeratedTagSplit (tvb, tree, offset,
+ "to State: ", BACnetEventState, 64);
+ break;
+ case 12: /* NotificationParameters */
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ offset = fNotificationParameters (tvb, pinfo, tree, offset);
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ default:
+ break;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fUnconfirmedEventNotificationRequest (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- return fConfirmedEventNotificationRequest (tvb, pinfo, tree, offset);
+ return fConfirmedEventNotificationRequest (tvb, pinfo, tree, offset);
}
static guint
fConfirmedCOVNotificationRequest (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0, len;
- guint8 tag_no, tag_info;
- guint32 lvt;
- proto_tree *subtree = tree;
- proto_item *tt;
-
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_closing(tag_info)) {
- offset += len;
- subtree = tree;
- continue;
- }
-
- switch (tag_no) {
- case 0: /* ProcessId */
- offset = fProcessId (tvb,tree,offset);
- break;
- case 1: /* initiating DeviceId */
- offset = fObjectIdentifier (tvb, pinfo, subtree, offset);
- break;
- case 2: /* monitored ObjectId */
- offset = fObjectIdentifier (tvb, pinfo, subtree, offset);
- break;
- case 3: /* time remaining */
- offset = fTimeSpan (tvb, tree, offset, "Time remaining");
- break;
- case 4: /* List of Values */
- if (tag_is_opening(tag_info)) {
- tt = proto_tree_add_text(subtree, tvb, offset, 1, "list of Values");
- subtree = proto_item_add_subtree(tt, ett_bacapp_value);
- offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- offset = fBACnetPropertyValue (tvb, pinfo, subtree, offset);
- break;
- }
- FAULT;
- break;
- default:
- return offset;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint lastoffset = 0, len;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ proto_tree *subtree = tree;
+ proto_item *tt;
+
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_is_closing(tag_info)) {
+ offset += len;
+ subtree = tree;
+ continue;
+ }
+
+ switch (tag_no) {
+ case 0: /* ProcessId */
+ offset = fProcessId (tvb,tree,offset);
+ break;
+ case 1: /* initiating DeviceId */
+ offset = fObjectIdentifier (tvb, pinfo, subtree, offset);
+ break;
+ case 2: /* monitored ObjectId */
+ offset = fObjectIdentifier (tvb, pinfo, subtree, offset);
+ break;
+ case 3: /* time remaining */
+ offset = fTimeSpan (tvb, tree, offset, "Time remaining");
+ break;
+ case 4: /* List of Values */
+ if (tag_is_opening(tag_info)) {
+ tt = proto_tree_add_text(subtree, tvb, offset, 1, "list of Values");
+ subtree = proto_item_add_subtree(tt, ett_bacapp_value);
+ offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ offset = fBACnetPropertyValue (tvb, pinfo, subtree, offset);
+ break;
+ }
+ FAULT;
+ break;
+ default:
+ return offset;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fUnconfirmedCOVNotificationRequest (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- return fConfirmedCOVNotificationRequest (tvb, pinfo, tree, offset);
+ return fConfirmedCOVNotificationRequest (tvb, pinfo, tree, offset);
}
static guint
fAcknowledgeAlarmRequest (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0;
- guint8 tag_no = 0, tag_info = 0;
- guint32 lvt = 0;
-
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- switch (fTagNo(tvb, offset)) {
- case 0: /* acknowledgingProcessId */
- offset = fUnsignedTag (tvb, tree, offset, "acknowledging Process Id: ");
- break;
- case 1: /* eventObjectId */
- offset = fObjectIdentifier (tvb, pinfo, tree, offset);
- break;
- case 2: /* eventStateAcknowledged */
- offset = fEnumeratedTagSplit (tvb, tree, offset,
- "event State Acknowledged: ", BACnetEventState, 64);
- break;
- case 3: /* timeStamp */
- offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &tag_info, &lvt);
- offset = fTimeStamp(tvb, tree, offset, NULL);
- offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &tag_info, &lvt);
- break;
- case 4: /* acknowledgementSource */
- offset = fCharacterString (tvb, tree, offset, "acknowledgement Source: ");
- break;
- case 5: /* timeOfAcknowledgement */
- offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &tag_info, &lvt);
- offset = fTimeStamp(tvb, tree, offset, "acknowledgement timestamp: ");
- offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &tag_info, &lvt);
- break;
- default:
- return offset;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint lastoffset = 0;
+ guint8 tag_no = 0, tag_info = 0;
+ guint32 lvt = 0;
+
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ switch (fTagNo(tvb, offset)) {
+ case 0: /* acknowledgingProcessId */
+ offset = fUnsignedTag (tvb, tree, offset, "acknowledging Process Id: ");
+ break;
+ case 1: /* eventObjectId */
+ offset = fObjectIdentifier (tvb, pinfo, tree, offset);
+ break;
+ case 2: /* eventStateAcknowledged */
+ offset = fEnumeratedTagSplit (tvb, tree, offset,
+ "event State Acknowledged: ", BACnetEventState, 64);
+ break;
+ case 3: /* timeStamp */
+ offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ offset = fTimeStamp(tvb, tree, offset, NULL);
+ offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ case 4: /* acknowledgementSource */
+ offset = fCharacterString (tvb, tree, offset, "acknowledgement Source: ");
+ break;
+ case 5: /* timeOfAcknowledgement */
+ offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ offset = fTimeStamp(tvb, tree, offset, "acknowledgement timestamp: ");
+ offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ default:
+ return offset;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fGetAlarmSummaryAck (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0;
+ guint lastoffset = 0;
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- offset = fApplicationTypes (tvb, pinfo, tree, offset, "Object Identifier: ");
- offset = fApplicationTypesEnumeratedSplit (tvb, pinfo, tree, offset,
- "alarm State: ", BACnetEventState, 64);
- offset = fApplicationTypesEnumerated (tvb, pinfo, tree, offset,
- "acknowledged Transitions: ", BACnetEventTransitionBits);
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ offset = fApplicationTypes (tvb, pinfo, tree, offset, "Object Identifier: ");
+ offset = fApplicationTypesEnumeratedSplit (tvb, pinfo, tree, offset,
+ "alarm State: ", BACnetEventState, 64);
+ offset = fApplicationTypesEnumerated (tvb, pinfo, tree, offset,
+ "acknowledged Transitions: ", BACnetEventTransitionBits);
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fGetEnrollmentSummaryRequest (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0;
- guint8 tag_no, tag_info;
- guint32 lvt;
-
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- switch (fTagNo(tvb, offset)) {
- case 0: /* acknowledgmentFilter */
- offset = fEnumeratedTag (tvb, tree, offset,
- "acknowledgment Filter: ", BACnetAcknowledgementFilter);
- break;
- case 1: /* eventObjectId - OPTIONAL */
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- offset = fRecipientProcess (tvb, pinfo, tree, offset);
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- break;
- case 2: /* eventStateFilter */
- offset = fEnumeratedTag (tvb, tree, offset,
- "event State Filter: ", BACnetEventStateFilter);
- break;
- case 3: /* eventTypeFilter - OPTIONAL */
- offset = fEnumeratedTag (tvb, tree, offset,
- "event Type Filter: ", BACnetEventType);
- break;
- case 4: /* priorityFilter */
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- offset = fUnsignedTag (tvb, tree, offset, "min Priority: ");
- offset = fUnsignedTag (tvb, tree, offset, "max Priority: ");
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- break;
- case 5: /* notificationClassFilter - OPTIONAL */
- offset = fUnsignedTag (tvb, tree, offset, "notification Class Filter: ");
- break;
- default:
- return offset;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint lastoffset = 0;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ switch (fTagNo(tvb, offset)) {
+ case 0: /* acknowledgmentFilter */
+ offset = fEnumeratedTag (tvb, tree, offset,
+ "acknowledgment Filter: ", BACnetAcknowledgementFilter);
+ break;
+ case 1: /* eventObjectId - OPTIONAL */
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ offset = fRecipientProcess (tvb, pinfo, tree, offset);
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ case 2: /* eventStateFilter */
+ offset = fEnumeratedTag (tvb, tree, offset,
+ "event State Filter: ", BACnetEventStateFilter);
+ break;
+ case 3: /* eventTypeFilter - OPTIONAL */
+ offset = fEnumeratedTag (tvb, tree, offset,
+ "event Type Filter: ", BACnetEventType);
+ break;
+ case 4: /* priorityFilter */
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ offset = fUnsignedTag (tvb, tree, offset, "min Priority: ");
+ offset = fUnsignedTag (tvb, tree, offset, "max Priority: ");
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ case 5: /* notificationClassFilter - OPTIONAL */
+ offset = fUnsignedTag (tvb, tree, offset, "notification Class Filter: ");
+ break;
+ default:
+ return offset;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fGetEnrollmentSummaryAck (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0;
+ guint lastoffset = 0;
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- offset = fApplicationTypes (tvb, pinfo, tree, offset, "Object Identifier: ");
- offset = fApplicationTypesEnumeratedSplit (tvb, pinfo, tree, offset,
- "event Type: ", BACnetEventType, 64);
- offset = fApplicationTypesEnumerated (tvb, pinfo, tree, offset,
- "event State: ", BACnetEventState);
- offset = fApplicationTypes (tvb, pinfo, tree, offset, "Priority: ");
- offset = fApplicationTypes (tvb, pinfo, tree, offset, "Notification Class: ");
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ offset = fApplicationTypes (tvb, pinfo, tree, offset, "Object Identifier: ");
+ offset = fApplicationTypesEnumeratedSplit (tvb, pinfo, tree, offset,
+ "event Type: ", BACnetEventType, 64);
+ offset = fApplicationTypesEnumerated (tvb, pinfo, tree, offset,
+ "event State: ", BACnetEventState);
+ offset = fApplicationTypes (tvb, pinfo, tree, offset, "Priority: ");
+ offset = fApplicationTypes (tvb, pinfo, tree, offset, "Notification Class: ");
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
- return offset;
+ return offset;
}
static guint
fGetEventInformationRequest (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- if (tvb_reported_length_remaining(tvb, offset) > 0) {
- if (fTagNo(tvb, offset) == 0) {
- offset = fObjectIdentifier (tvb, pinfo, tree, offset);
- }
- }
- return offset;
+ if (tvb_reported_length_remaining(tvb, offset) > 0) {
+ if (fTagNo(tvb, offset) == 0) {
+ offset = fObjectIdentifier (tvb, pinfo, tree, offset);
+ }
+ }
+ return offset;
}
static guint
flistOfEventSummaries (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0;
- guint8 tag_no, tag_info;
- guint32 lvt;
- proto_tree* subtree = tree;
- proto_item* ti = 0;
-
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- /* we are finished here if we spot a closing tag */
- if (tag_is_closing(tag_info)) {
- break;
- }
- switch (tag_no) {
- case 0: /* ObjectId */
- offset = fObjectIdentifier (tvb, pinfo, tree, offset);
- break;
- case 1: /* eventState */
- offset = fEnumeratedTag (tvb, tree, offset,
- "event State: ", BACnetEventState);
- break;
- case 2: /* acknowledgedTransitions */
- offset = fBitStringTagVS (tvb, tree, offset,
- "acknowledged Transitions: ", BACnetEventTransitionBits);
- break;
- case 3: /* eventTimeStamps */
- ti = proto_tree_add_text(tree, tvb, offset, lvt, "eventTimeStamps");
- if (ti) {
- subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
- }
- offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- offset = fTimeStamp (tvb, subtree, offset,"TO-OFFNORMAL timestamp: ");
- offset = fTimeStamp (tvb, subtree, offset,"TO-FAULT timestamp: ");
- offset = fTimeStamp (tvb, subtree, offset,"TO-NORMAL timestamp: ");
- offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- break;
- case 4: /* notifyType */
- offset = fEnumeratedTag (tvb, tree, offset,
- "Notify Type: ", BACnetNotifyType);
- break;
- case 5: /* eventEnable */
- offset = fBitStringTagVS (tvb, tree, offset,
- "event Enable: ", BACnetEventTransitionBits);
- break;
- case 6: /* eventPriorities */
- ti = proto_tree_add_text(tree, tvb, offset, lvt, "eventPriorities");
- if (ti) {
- subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
- }
- offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- offset = fUnsignedTag (tvb, subtree, offset, "TO-OFFNORMAL Priority: ");
- offset = fUnsignedTag (tvb, subtree, offset, "TO-FAULT Priority: ");
- offset = fUnsignedTag (tvb, subtree, offset, "TO-NORMAL Priority: ");
- offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- break;
- default:
- return offset;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint lastoffset = 0;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ proto_tree* subtree = tree;
+ proto_item* ti = 0;
+
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ /* we are finished here if we spot a closing tag */
+ if (tag_is_closing(tag_info)) {
+ break;
+ }
+ switch (tag_no) {
+ case 0: /* ObjectId */
+ offset = fObjectIdentifier (tvb, pinfo, tree, offset);
+ break;
+ case 1: /* eventState */
+ offset = fEnumeratedTag (tvb, tree, offset,
+ "event State: ", BACnetEventState);
+ break;
+ case 2: /* acknowledgedTransitions */
+ offset = fBitStringTagVS (tvb, tree, offset,
+ "acknowledged Transitions: ", BACnetEventTransitionBits);
+ break;
+ case 3: /* eventTimeStamps */
+ ti = proto_tree_add_text(tree, tvb, offset, lvt, "eventTimeStamps");
+ if (ti) {
+ subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
+ }
+ offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ offset = fTimeStamp (tvb, subtree, offset,"TO-OFFNORMAL timestamp: ");
+ offset = fTimeStamp (tvb, subtree, offset,"TO-FAULT timestamp: ");
+ offset = fTimeStamp (tvb, subtree, offset,"TO-NORMAL timestamp: ");
+ offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ case 4: /* notifyType */
+ offset = fEnumeratedTag (tvb, tree, offset,
+ "Notify Type: ", BACnetNotifyType);
+ break;
+ case 5: /* eventEnable */
+ offset = fBitStringTagVS (tvb, tree, offset,
+ "event Enable: ", BACnetEventTransitionBits);
+ break;
+ case 6: /* eventPriorities */
+ ti = proto_tree_add_text(tree, tvb, offset, lvt, "eventPriorities");
+ if (ti) {
+ subtree = proto_item_add_subtree(ti, ett_bacapp_tag);
+ }
+ offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ offset = fUnsignedTag (tvb, subtree, offset, "TO-OFFNORMAL Priority: ");
+ offset = fUnsignedTag (tvb, subtree, offset, "TO-FAULT Priority: ");
+ offset = fUnsignedTag (tvb, subtree, offset, "TO-NORMAL Priority: ");
+ offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ default:
+ return offset;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fLOPR (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0;
- guint8 tag_no, tag_info;
- guint32 lvt;
+ guint lastoffset = 0;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
- col_set_writable(pinfo->cinfo, FALSE); /* don't set all infos into INFO column */
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- /* we are finished here if we spot a closing tag */
- if (tag_is_closing(tag_info)) {
- break;
- }
- offset = fDeviceObjectPropertyReference(tvb, pinfo, tree, offset);
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ col_set_writable(pinfo->cinfo, FALSE); /* don't set all infos into INFO column */
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ /* we are finished here if we spot a closing tag */
+ if (tag_is_closing(tag_info)) {
+ break;
+ }
+ offset = fDeviceObjectPropertyReference(tvb, pinfo, tree, offset);
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fGetEventInformationACK (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0;
- guint8 tag_no, tag_info;
- guint32 lvt;
-
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- switch (fTagNo(tvb, offset)) {
- case 0: /* listOfEventSummaries */
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- offset = flistOfEventSummaries (tvb, pinfo, tree, offset);
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- break;
- case 1: /* moreEvents */
- offset = fBooleanTag (tvb, tree, offset, "more Events: ");
- break;
- default:
- return offset;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint lastoffset = 0;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ switch (fTagNo(tvb, offset)) {
+ case 0: /* listOfEventSummaries */
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ offset = flistOfEventSummaries (tvb, pinfo, tree, offset);
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ case 1: /* moreEvents */
+ offset = fBooleanTag (tvb, tree, offset, "more Events: ");
+ break;
+ default:
+ return offset;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fAddListElementRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0, len;
- guint8 tag_no, tag_info;
- guint32 lvt;
- proto_tree *subtree = tree;
- proto_item *tt;
-
- col_set_writable(pinfo->cinfo, FALSE); /* don't set all infos into INFO column */
-
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_closing(tag_info)) {
- offset += len;
- subtree = tree;
- continue;
- }
-
- switch (tag_no) {
- case 0: /* ObjectId */
- offset = fBACnetObjectPropertyReference (tvb, pinfo, subtree, offset);
- break;
- case 3: /* listOfElements */
- if (tag_is_opening(tag_info)) {
- tt = proto_tree_add_text(subtree, tvb, offset, 1, "listOfElements");
- subtree = proto_item_add_subtree(tt, ett_bacapp_value);
- offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- offset = fAbstractSyntaxNType (tvb, pinfo, subtree, offset);
- break;
- }
- FAULT;
- break;
- default:
- return offset;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint lastoffset = 0, len;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ proto_tree *subtree = tree;
+ proto_item *tt;
+
+ col_set_writable(pinfo->cinfo, FALSE); /* don't set all infos into INFO column */
+
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_is_closing(tag_info)) {
+ offset += len;
+ subtree = tree;
+ continue;
+ }
+
+ switch (tag_no) {
+ case 0: /* ObjectId */
+ offset = fBACnetObjectPropertyReference (tvb, pinfo, subtree, offset);
+ break;
+ case 3: /* listOfElements */
+ if (tag_is_opening(tag_info)) {
+ tt = proto_tree_add_text(subtree, tvb, offset, 1, "listOfElements");
+ subtree = proto_item_add_subtree(tt, ett_bacapp_value);
+ offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ offset = fAbstractSyntaxNType (tvb, pinfo, subtree, offset);
+ break;
+ }
+ FAULT;
+ break;
+ default:
+ return offset;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fDeleteObjectRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- return fObjectIdentifier (tvb, pinfo, tree, offset);
+ return fObjectIdentifier (tvb, pinfo, tree, offset);
}
static guint
fDeviceCommunicationControlRequest(tvbuff_t *tvb, proto_tree *tree, guint offset)
{
- guint lastoffset = 0;
+ guint lastoffset = 0;
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
- switch (fTagNo(tvb, offset)) {
- case 0: /* timeDuration */
- offset = fUnsignedTag (tvb,tree,offset,"time Duration: ");
- break;
- case 1: /* enable-disable */
- offset = fEnumeratedTag (tvb, tree, offset, "enable-disable: ",
- BACnetEnableDisable);
- break;
- case 2: /* password - OPTIONAL */
- offset = fCharacterString (tvb, tree, offset, "Password: ");
- break;
- default:
- return offset;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ switch (fTagNo(tvb, offset)) {
+ case 0: /* timeDuration */
+ offset = fUnsignedTag (tvb,tree,offset,"time Duration: ");
+ break;
+ case 1: /* enable-disable */
+ offset = fEnumeratedTag (tvb, tree, offset, "enable-disable: ",
+ BACnetEnableDisable);
+ break;
+ case 2: /* password - OPTIONAL */
+ offset = fCharacterString (tvb, tree, offset, "Password: ");
+ break;
+ default:
+ return offset;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fReinitializeDeviceRequest(tvbuff_t *tvb, proto_tree *tree, guint offset)
{
- guint lastoffset = 0;
+ guint lastoffset = 0;
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
- switch (fTagNo(tvb, offset)) {
- case 0: /* reinitializedStateOfDevice */
- offset = fEnumeratedTag (tvb, tree, offset,
- "reinitialized State Of Device: ",
- BACnetReinitializedStateOfDevice);
- break;
- case 1: /* password - OPTIONAL */
- offset = fCharacterString (tvb, tree, offset, "Password: ");
- break;
- default:
- return offset;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ switch (fTagNo(tvb, offset)) {
+ case 0: /* reinitializedStateOfDevice */
+ offset = fEnumeratedTag (tvb, tree, offset,
+ "reinitialized State Of Device: ",
+ BACnetReinitializedStateOfDevice);
+ break;
+ case 1: /* password - OPTIONAL */
+ offset = fCharacterString (tvb, tree, offset, "Password: ");
+ break;
+ default:
+ return offset;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fVtOpenRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- offset = fApplicationTypesEnumerated (tvb, pinfo, tree, offset,
- "vtClass: ", BACnetVTClass);
- return fApplicationTypes (tvb, pinfo, tree,offset,"local VT Session ID: ");
+ offset = fApplicationTypesEnumerated (tvb, pinfo, tree, offset,
+ "vtClass: ", BACnetVTClass);
+ return fApplicationTypes (tvb, pinfo, tree,offset,"local VT Session ID: ");
}
static guint
fVtOpenAck (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- return fApplicationTypes (tvb, pinfo, tree,offset,"remote VT Session ID: ");
+ return fApplicationTypes (tvb, pinfo, tree,offset,"remote VT Session ID: ");
}
static guint
fVtCloseRequest (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0;
+ guint lastoffset = 0;
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- offset= fApplicationTypes (tvb, pinfo, tree,offset,"remote VT Session ID: ");
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ offset= fApplicationTypes (tvb, pinfo, tree,offset,"remote VT Session ID: ");
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fVtDataRequest (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- offset= fApplicationTypes (tvb, pinfo, tree,offset,"VT Session ID: ");
- offset = fApplicationTypes (tvb, pinfo, tree, offset, "VT New Data: ");
- return fApplicationTypes (tvb, pinfo, tree,offset,"VT Data Flag: ");;
+ offset= fApplicationTypes (tvb, pinfo, tree,offset,"VT Session ID: ");
+ offset = fApplicationTypes (tvb, pinfo, tree, offset, "VT New Data: ");
+ return fApplicationTypes (tvb, pinfo, tree,offset,"VT Data Flag: ");;
}
static guint
fVtDataAck (tvbuff_t *tvb, proto_tree *tree, guint offset)
{
- guint lastoffset = 0;
+ guint lastoffset = 0;
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
- switch (fTagNo(tvb,offset)) {
- case 0: /* BOOLEAN */
- offset = fBooleanTag (tvb, tree, offset, "all New Data Accepted: ");
- break;
- case 1: /* Unsigned OPTIONAL */
- offset = fUnsignedTag (tvb, tree, offset, "accepted Octet Count: ");
- break;
- default:
- return offset;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ switch (fTagNo(tvb,offset)) {
+ case 0: /* BOOLEAN */
+ offset = fBooleanTag (tvb, tree, offset, "all New Data Accepted: ");
+ break;
+ case 1: /* Unsigned OPTIONAL */
+ offset = fUnsignedTag (tvb, tree, offset, "accepted Octet Count: ");
+ break;
+ default:
+ return offset;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fAuthenticateRequest (tvbuff_t *tvb, proto_tree *tree, guint offset)
{
- guint lastoffset = 0;
-
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
-
- switch (fTagNo(tvb,offset)) {
- case 0: /* Unsigned32 */
- offset = fUnsignedTag (tvb, tree, offset, "pseudo Random Number: ");
- break;
- case 1: /* expected Invoke ID Unsigned8 OPTIONAL */
- proto_tree_add_item(tree, hf_bacapp_invoke_id, tvb, offset++, 1, ENC_BIG_ENDIAN);
- break;
- case 2: /* Chararacter String OPTIONAL */
- offset = fCharacterString (tvb, tree, offset, "operator Name: ");
- break;
- case 3: /* Chararacter String OPTIONAL */
- offset = fCharacterString (tvb, tree, offset, "operator Password: ");
- break;
- case 4: /* Boolean OPTIONAL */
- offset = fBooleanTag (tvb, tree, offset, "start Encyphered Session: ");
- break;
- default:
- return offset;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint lastoffset = 0;
+
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+
+ switch (fTagNo(tvb,offset)) {
+ case 0: /* Unsigned32 */
+ offset = fUnsignedTag (tvb, tree, offset, "pseudo Random Number: ");
+ break;
+ case 1: /* expected Invoke ID Unsigned8 OPTIONAL */
+ proto_tree_add_item(tree, hf_bacapp_invoke_id, tvb, offset++, 1, ENC_BIG_ENDIAN);
+ break;
+ case 2: /* Chararacter String OPTIONAL */
+ offset = fCharacterString (tvb, tree, offset, "operator Name: ");
+ break;
+ case 3: /* Chararacter String OPTIONAL */
+ offset = fCharacterString (tvb, tree, offset, "operator Password: ");
+ break;
+ case 4: /* Boolean OPTIONAL */
+ offset = fBooleanTag (tvb, tree, offset, "start Encyphered Session: ");
+ break;
+ default:
+ return offset;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fAuthenticateAck (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- return fApplicationTypes (tvb, pinfo, tree, offset, "modified Random Number: ");
+ return fApplicationTypes (tvb, pinfo, tree, offset, "modified Random Number: ");
}
static guint
fRequestKeyRequest (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- offset = fObjectIdentifier (tvb, pinfo, tree, offset); /* Requesting Device Identifier */
- offset = fAddress (tvb, tree, offset);
- offset = fObjectIdentifier (tvb, pinfo, tree, offset); /* Remote Device Identifier */
- return fAddress (tvb, tree, offset);
+ offset = fObjectIdentifier (tvb, pinfo, tree, offset); /* Requesting Device Identifier */
+ offset = fAddress (tvb, tree, offset);
+ offset = fObjectIdentifier (tvb, pinfo, tree, offset); /* Remote Device Identifier */
+ return fAddress (tvb, tree, offset);
}
static guint
fRemoveListElementRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- /* Same as AddListElement request after service choice */
- return fAddListElementRequest(tvb, pinfo, tree, offset);
+ /* Same as AddListElement request after service choice */
+ return fAddListElementRequest(tvb, pinfo, tree, offset);
}
static guint
fReadPropertyRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- return fBACnetObjectPropertyReference(tvb, pinfo, tree, offset);
+ return fBACnetObjectPropertyReference(tvb, pinfo, tree, offset);
}
static guint
fReadPropertyAck (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0, len;
- guint8 tag_no, tag_info;
- guint32 lvt;
- proto_tree *subtree = tree;
-
- /* set the optional global properties to indicate not-used */
- propertyArrayIndex = -1;
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_closing(tag_info)) {
- offset += len;
- subtree = tree;
- continue;
- }
- switch (tag_no) {
- case 0: /* objectIdentifier */
- offset = fObjectIdentifier (tvb, pinfo, subtree, offset);
- break;
- case 1: /* propertyIdentifier */
- offset = fPropertyIdentifier (tvb, pinfo, subtree, offset);
- break;
- case 2: /* propertyArrayIndex */
- offset = fPropertyArrayIndex (tvb, subtree, offset);
- break;
- case 3: /* propertyValue */
- offset = fPropertyValue (tvb, pinfo, subtree, offset, tag_info);
- break;
- default:
- break;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint lastoffset = 0, len;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ proto_tree *subtree = tree;
+
+ /* set the optional global properties to indicate not-used */
+ propertyArrayIndex = -1;
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_is_closing(tag_info)) {
+ offset += len;
+ subtree = tree;
+ continue;
+ }
+ switch (tag_no) {
+ case 0: /* objectIdentifier */
+ offset = fObjectIdentifier (tvb, pinfo, subtree, offset);
+ break;
+ case 1: /* propertyIdentifier */
+ offset = fPropertyIdentifier (tvb, pinfo, subtree, offset);
+ break;
+ case 2: /* propertyArrayIndex */
+ offset = fPropertyArrayIndex (tvb, subtree, offset);
+ break;
+ case 3: /* propertyValue */
+ offset = fPropertyValue (tvb, pinfo, subtree, offset, tag_info);
+ break;
+ default:
+ break;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fWritePropertyRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0;
- guint8 tag_no, tag_info;
- guint32 lvt;
- proto_tree *subtree = tree;
-
- /* set the optional global properties to indicate not-used */
- propertyArrayIndex = -1;
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- /* quit loop if we spot a closing tag */
- if (tag_is_closing(tag_info)) {
- subtree = tree;
- break;
- }
-
- switch (tag_no) {
- case 0: /* objectIdentifier */
- offset = fObjectIdentifier (tvb, pinfo, subtree, offset);
- break;
- case 1: /* propertyIdentifier */
- offset = fPropertyIdentifier (tvb, pinfo, subtree, offset);
- break;
- case 2: /* propertyArrayIndex */
- offset = fPropertyArrayIndex (tvb, subtree, offset);
- break;
- case 3: /* propertyValue */
- offset = fPropertyValue (tvb, pinfo, subtree, offset, tag_info);
- break;
- case 4: /* Priority (only used for write) */
- offset = fUnsignedTag (tvb, subtree, offset, "Priority: ");
- break;
- default:
- return offset;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint lastoffset = 0;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ proto_tree *subtree = tree;
+
+ /* set the optional global properties to indicate not-used */
+ propertyArrayIndex = -1;
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ /* quit loop if we spot a closing tag */
+ if (tag_is_closing(tag_info)) {
+ subtree = tree;
+ break;
+ }
+
+ switch (tag_no) {
+ case 0: /* objectIdentifier */
+ offset = fObjectIdentifier (tvb, pinfo, subtree, offset);
+ break;
+ case 1: /* propertyIdentifier */
+ offset = fPropertyIdentifier (tvb, pinfo, subtree, offset);
+ break;
+ case 2: /* propertyArrayIndex */
+ offset = fPropertyArrayIndex (tvb, subtree, offset);
+ break;
+ case 3: /* propertyValue */
+ offset = fPropertyValue (tvb, pinfo, subtree, offset, tag_info);
+ break;
+ case 4: /* Priority (only used for write) */
+ offset = fUnsignedTag (tvb, subtree, offset, "Priority: ");
+ break;
+ default:
+ return offset;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fWriteAccessSpecification (tvbuff_t *tvb, packet_info *pinfo, proto_tree *subtree, guint offset)
{
- guint lastoffset = 0, len;
- guint8 tag_no, tag_info;
- guint32 lvt;
-
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- /* maybe a listOfwriteAccessSpecifications if we spot a closing tag */
- if (tag_is_closing(tag_info)) {
- offset += len;
- continue;
- }
-
- switch (tag_no) {
- case 0: /* objectIdentifier */
- offset = fObjectIdentifier (tvb, pinfo, subtree, offset);
- break;
- case 1: /* listOfPropertyValues */
- if (tag_is_opening(tag_info)) {
- offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- offset = fBACnetPropertyValue (tvb, pinfo, subtree, offset);
- break;
- }
- FAULT;
- break;
- default:
- return offset;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint lastoffset = 0, len;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ /* maybe a listOfwriteAccessSpecifications if we spot a closing tag */
+ if (tag_is_closing(tag_info)) {
+ offset += len;
+ continue;
+ }
+
+ switch (tag_no) {
+ case 0: /* objectIdentifier */
+ offset = fObjectIdentifier (tvb, pinfo, subtree, offset);
+ break;
+ case 1: /* listOfPropertyValues */
+ if (tag_is_opening(tag_info)) {
+ offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ offset = fBACnetPropertyValue (tvb, pinfo, subtree, offset);
+ break;
+ }
+ FAULT;
+ break;
+ default:
+ return offset;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fWritePropertyMultipleRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- if (offset >= tvb_reported_length(tvb))
- return offset;
+ if (offset >= tvb_reported_length(tvb))
+ return offset;
- col_set_writable(pinfo->cinfo, FALSE); /* don't set all infos into INFO column */
- return fWriteAccessSpecification (tvb, pinfo, tree, offset);
+ col_set_writable(pinfo->cinfo, FALSE); /* don't set all infos into INFO column */
+ return fWriteAccessSpecification (tvb, pinfo, tree, offset);
}
static guint
fPropertyReference (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset, guint8 tagoffset, guint8 list)
{
- guint lastoffset = 0;
- guint8 tag_no, tag_info;
- guint32 lvt;
-
- /* set the optional global properties to indicate not-used */
- propertyArrayIndex = -1;
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_closing(tag_info)) { /* closing Tag, but not for me */
- return offset;
- } else if (tag_is_opening(tag_info)) { /* opening Tag, but not for me */
- return offset;
- }
- switch (tag_no-tagoffset) {
- case 0: /* PropertyIdentifier */
- offset = fPropertyIdentifier (tvb, pinfo, tree, offset);
- break;
- case 1: /* propertyArrayIndex */
- offset = fPropertyArrayIndex (tvb, tree, offset);
- if (list != 0) break; /* Continue decoding if this may be a list */
- default:
- lastoffset = offset; /* Set loop end condition */
- break;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint lastoffset = 0;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+
+ /* set the optional global properties to indicate not-used */
+ propertyArrayIndex = -1;
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_is_closing(tag_info)) { /* closing Tag, but not for me */
+ return offset;
+ } else if (tag_is_opening(tag_info)) { /* opening Tag, but not for me */
+ return offset;
+ }
+ switch (tag_no-tagoffset) {
+ case 0: /* PropertyIdentifier */
+ offset = fPropertyIdentifier (tvb, pinfo, tree, offset);
+ break;
+ case 1: /* propertyArrayIndex */
+ offset = fPropertyArrayIndex (tvb, tree, offset);
+ if (list != 0) break; /* Continue decoding if this may be a list */
+ default:
+ lastoffset = offset; /* Set loop end condition */
+ break;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fBACnetPropertyReference (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset, guint8 list)
{
- col_set_writable(pinfo->cinfo, FALSE); /* don't set all infos into INFO column */
- return fPropertyReference(tvb, pinfo, tree, offset, 0, list);
+ col_set_writable(pinfo->cinfo, FALSE); /* don't set all infos into INFO column */
+ return fPropertyReference(tvb, pinfo, tree, offset, 0, list);
}
static guint
fBACnetObjectPropertyReference (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0;
+ guint lastoffset = 0;
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
- switch (fTagNo(tvb,offset)) {
- case 0: /* ObjectIdentifier */
- offset = fObjectIdentifier (tvb, pinfo, tree, offset);
- break;
- case 1: /* PropertyIdentifier and propertyArrayIndex */
- offset = fPropertyReference (tvb, pinfo, tree, offset, 1, 0);
- col_set_writable(pinfo->cinfo, FALSE); /* don't set all infos into INFO column */
- default:
- lastoffset = offset; /* Set loop end condition */
- break;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ switch (fTagNo(tvb,offset)) {
+ case 0: /* ObjectIdentifier */
+ offset = fObjectIdentifier (tvb, pinfo, tree, offset);
+ break;
+ case 1: /* PropertyIdentifier and propertyArrayIndex */
+ offset = fPropertyReference (tvb, pinfo, tree, offset, 1, 0);
+ col_set_writable(pinfo->cinfo, FALSE); /* don't set all infos into INFO column */
+ default:
+ lastoffset = offset; /* Set loop end condition */
+ break;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
#if 0
static guint
fObjectPropertyValue (tvbuff_t *tvb, proto_tree *tree, guint offset)
{
- guint lastoffset = 0;
- guint8 tag_no, tag_info;
- guint32 lvt;
- proto_tree* subtree = tree;
- proto_item* tt;
-
- while ((tvb_reported_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_closing(tag_info)) {
- offset += fTagHeaderTree (tvb, subtree, offset,
- &tag_no, &tag_info, &lvt);
- continue;
- }
- switch (tag_no) {
- case 0: /* ObjectIdentifier */
- offset = fObjectIdentifier (tvb, pinfo, subtree, offset);
- break;
- case 1: /* PropertyIdentifier */
- offset = fPropertyIdentifier (tvb, pinfo, subtree, offset);
- break;
- case 2: /* propertyArrayIndex */
- offset = fUnsignedTag (tvb, subtree, offset, "property Array Index: ");
- break;
- case 3: /* Value */
- offset = fPropertyValue (tvb, subtree, offset, tag_info);
- break;
- case 4: /* Priority */
- offset = fUnsignedTag (tvb, subtree, offset, "Priority: ");
- break;
- default:
- break;
- }
- }
- return offset;
+ guint lastoffset = 0;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ proto_tree* subtree = tree;
+ proto_item* tt;
+
+ while ((tvb_reported_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_is_closing(tag_info)) {
+ offset += fTagHeaderTree (tvb, subtree, offset,
+ &tag_no, &tag_info, &lvt);
+ continue;
+ }
+ switch (tag_no) {
+ case 0: /* ObjectIdentifier */
+ offset = fObjectIdentifier (tvb, pinfo, subtree, offset);
+ break;
+ case 1: /* PropertyIdentifier */
+ offset = fPropertyIdentifier (tvb, pinfo, subtree, offset);
+ break;
+ case 2: /* propertyArrayIndex */
+ offset = fUnsignedTag (tvb, subtree, offset, "property Array Index: ");
+ break;
+ case 3: /* Value */
+ offset = fPropertyValue (tvb, subtree, offset, tag_info);
+ break;
+ case 4: /* Priority */
+ offset = fUnsignedTag (tvb, subtree, offset, "Priority: ");
+ break;
+ default:
+ break;
+ }
+ }
+ return offset;
}
#endif
static guint
fPriorityArray (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- char i = 1, ar[256];
- guint lastoffset = 0;
-
- if (propertyArrayIndex > 0) {
- /* BACnetARRAY index 0 refers to the length
- of the array, not the elements of the array.
- BACnetARRAY index -1 is our internal flag that
- the optional index was not used.
- BACnetARRAY refers to this as all elements of the array.
- If the optional index is specified for a BACnetARRAY,
- then that specific array element is referenced. */
- i = propertyArrayIndex;
- }
- while (tvb_reported_length_remaining(tvb, offset)) {
- /* exit loop if nothing happens inside */
- lastoffset = offset;
- g_snprintf (ar, sizeof(ar), "%s[%d]: ",
- val_to_split_str(87 , 512,
- BACnetPropertyIdentifier,
- ASHRAE_Reserved_Fmt,
- Vendor_Proprietary_Fmt),
- i++);
- /* DMR Should be fAbstractNSyntax, but that's where we came from! */
- offset = fApplicationTypes(tvb, pinfo, tree, offset, ar);
- /* there are only 16 priority array elements */
- if (i > 16) {
- break;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
-
- return offset;
+ char i = 1, ar[256];
+ guint lastoffset = 0;
+
+ if (propertyArrayIndex > 0) {
+ /* BACnetARRAY index 0 refers to the length
+ of the array, not the elements of the array.
+ BACnetARRAY index -1 is our internal flag that
+ the optional index was not used.
+ BACnetARRAY refers to this as all elements of the array.
+ If the optional index is specified for a BACnetARRAY,
+ then that specific array element is referenced. */
+ i = propertyArrayIndex;
+ }
+ while (tvb_reported_length_remaining(tvb, offset) > 0) {
+ /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ g_snprintf (ar, sizeof(ar), "%s[%d]: ",
+ val_to_split_str(87 , 512,
+ BACnetPropertyIdentifier,
+ ASHRAE_Reserved_Fmt,
+ Vendor_Proprietary_Fmt),
+ i++);
+ /* DMR Should be fAbstractNSyntax, but that's where we came from! */
+ offset = fApplicationTypes(tvb, pinfo, tree, offset, ar);
+ /* there are only 16 priority array elements */
+ if (i > 16) {
+ break;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+
+ return offset;
}
static guint
fDeviceObjectReference (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0;
+ guint lastoffset = 0;
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
- switch (fTagNo(tvb,offset)) {
- case 0: /* deviceIdentifier - OPTIONAL */
- offset = fObjectIdentifier (tvb, pinfo, tree, offset);
- break;
- case 1: /* ObjectIdentifier */
- offset = fObjectIdentifier (tvb, pinfo, tree, offset);
- break;
- default:
- return offset;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ switch (fTagNo(tvb,offset)) {
+ case 0: /* deviceIdentifier - OPTIONAL */
+ offset = fObjectIdentifier (tvb, pinfo, tree, offset);
+ break;
+ case 1: /* ObjectIdentifier */
+ offset = fObjectIdentifier (tvb, pinfo, tree, offset);
+ break;
+ default:
+ return offset;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fSpecialEvent (tvbuff_t *tvb, packet_info *pinfo, proto_tree *subtree, guint offset)
{
- guint8 tag_no, tag_info;
- guint32 lvt;
- guint lastoffset = 0, len;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ guint lastoffset = 0, len;
gboolean closing_found = FALSE; /* tracks when we are done decoding the fSpecialEvent entries */
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- /* maybe a SEQUENCE of SpecialEvents if we spot a closing tag */
- if (tag_is_closing(tag_info)) {
- /* if we find 2 closing tags in succession we need to exit without incrementing the offset again */
- /* This handles the special case where we have a special event entry in an RPM-ACK msg */
- if ( closing_found == TRUE )
- break;
- offset += len;
- closing_found = TRUE;
- continue;
- }
-
- switch (tag_no) {
- case 0: /* calendarEntry */
- if (tag_is_opening(tag_info)) {
- offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- offset = fCalendarEntry (tvb, subtree, offset);
- offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- }
- break;
- case 1: /* calendarReference */
- offset = fObjectIdentifier (tvb, pinfo, subtree, offset);
- break;
- case 2: /* list of BACnetTimeValue */
- if (tag_is_opening(tag_info)) {
- offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- offset = fTimeValue (tvb, pinfo, subtree, offset);
- offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- break;
- }
- FAULT;
- break;
- case 3: /* eventPriority */
- offset = fUnsignedTag (tvb, subtree, offset, "event priority: ");
- break;
- default:
- return offset;
- }
- closing_found = FALSE; /* reset our closing tag status, we processed another open tag */
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ /* maybe a SEQUENCE of SpecialEvents if we spot a closing tag */
+ if (tag_is_closing(tag_info)) {
+ /* if we find 2 closing tags in succession we need to exit without incrementing the offset again */
+ /* This handles the special case where we have a special event entry in an RPM-ACK msg */
+ if ( closing_found == TRUE )
+ break;
+ offset += len;
+ closing_found = TRUE;
+ continue;
+ }
+
+ switch (tag_no) {
+ case 0: /* calendarEntry */
+ if (tag_is_opening(tag_info)) {
+ offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ offset = fCalendarEntry (tvb, subtree, offset);
+ offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ }
+ break;
+ case 1: /* calendarReference */
+ offset = fObjectIdentifier (tvb, pinfo, subtree, offset);
+ break;
+ case 2: /* list of BACnetTimeValue */
+ if (tag_is_opening(tag_info)) {
+ offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ offset = fTimeValue (tvb, pinfo, subtree, offset);
+ offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ }
+ FAULT;
+ break;
+ case 3: /* eventPriority */
+ offset = fUnsignedTag (tvb, subtree, offset, "event priority: ");
+ break;
+ default:
+ return offset;
+ }
+ closing_found = FALSE; /* reset our closing tag status, we processed another open tag */
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fSelectionCriteria (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0, len;
- guint8 tag_no, tag_info;
- guint32 lvt;
-
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- /* maybe a listOfSelectionCriteria if we spot a closing tag */
- if (tag_is_closing(tag_info)) {
- offset += len;
- continue;
- }
-
- switch (fTagNo(tvb,offset)) {
- case 0: /* propertyIdentifier */
- offset = fPropertyIdentifier (tvb, pinfo, tree, offset);
- break;
- case 1: /* propertyArrayIndex */
- offset = fPropertyArrayIndex (tvb, tree, offset);
- break;
- case 2: /* relationSpecifier */
- offset = fEnumeratedTag (tvb, tree, offset,
- "relation Specifier: ", BACnetRelationSpecifier);
- break;
- case 3: /* comparisonValue */
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- offset = fAbstractSyntaxNType (tvb, pinfo, tree, offset);
- offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
- break;
- default:
- return offset;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint lastoffset = 0, len;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ /* maybe a listOfSelectionCriteria if we spot a closing tag */
+ if (tag_is_closing(tag_info)) {
+ offset += len;
+ continue;
+ }
+
+ switch (fTagNo(tvb,offset)) {
+ case 0: /* propertyIdentifier */
+ offset = fPropertyIdentifier (tvb, pinfo, tree, offset);
+ break;
+ case 1: /* propertyArrayIndex */
+ offset = fPropertyArrayIndex (tvb, tree, offset);
+ break;
+ case 2: /* relationSpecifier */
+ offset = fEnumeratedTag (tvb, tree, offset,
+ "relation Specifier: ", BACnetRelationSpecifier);
+ break;
+ case 3: /* comparisonValue */
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ offset = fAbstractSyntaxNType (tvb, pinfo, tree, offset);
+ offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ default:
+ return offset;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fObjectSelectionCriteria (tvbuff_t *tvb, packet_info *pinfo, proto_tree *subtree, guint offset)
{
- guint lastoffset = 0;
- guint8 tag_no, tag_info;
- guint32 lvt;
-
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- /* quit loop if we spot a closing tag */
- if (tag_is_closing(tag_info)) {
- break;
- }
-
- switch (tag_no) {
- case 0: /* selectionLogic */
- offset = fEnumeratedTag (tvb, subtree, offset,
- "selection Logic: ", BACnetSelectionLogic);
- break;
- case 1: /* listOfSelectionCriteria */
- if (tag_is_opening(tag_info)) {
- offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- offset = fSelectionCriteria (tvb, pinfo, subtree, offset);
- offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- break;
- }
- FAULT;
- break;
- default:
- return offset;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint lastoffset = 0;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ /* quit loop if we spot a closing tag */
+ if (tag_is_closing(tag_info)) {
+ break;
+ }
+
+ switch (tag_no) {
+ case 0: /* selectionLogic */
+ offset = fEnumeratedTag (tvb, subtree, offset,
+ "selection Logic: ", BACnetSelectionLogic);
+ break;
+ case 1: /* listOfSelectionCriteria */
+ if (tag_is_opening(tag_info)) {
+ offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ offset = fSelectionCriteria (tvb, pinfo, subtree, offset);
+ offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ }
+ FAULT;
+ break;
+ default:
+ return offset;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fReadPropertyConditionalRequest(tvbuff_t *tvb, packet_info* pinfo, proto_tree *subtree, guint offset)
{
- guint lastoffset = 0;
- guint8 tag_no, tag_info;
- guint32 lvt;
-
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
-
- if (tag_is_opening(tag_info) && tag_no < 2) {
- offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- switch (tag_no) {
- case 0: /* objectSelectionCriteria */
- offset = fObjectSelectionCriteria (tvb, pinfo, subtree, offset);
- break;
- case 1: /* listOfPropertyReferences */
- offset = fBACnetPropertyReference (tvb, pinfo, subtree, offset, 1);
- break;
- default:
- return offset;
- }
- offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint lastoffset = 0;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+
+ if (tag_is_opening(tag_info) && tag_no < 2) {
+ offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ switch (tag_no) {
+ case 0: /* objectSelectionCriteria */
+ offset = fObjectSelectionCriteria (tvb, pinfo, subtree, offset);
+ break;
+ case 1: /* listOfPropertyReferences */
+ offset = fBACnetPropertyReference (tvb, pinfo, subtree, offset, 1);
+ break;
+ default:
+ return offset;
+ }
+ offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fReadAccessSpecification (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0;
- guint8 tag_no, tag_info;
- guint32 lvt;
- proto_item *tt;
- proto_tree *subtree = tree;
-
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- switch (tag_no) {
- case 0: /* objectIdentifier */
- offset = fObjectIdentifier (tvb, pinfo, subtree, offset);
- break;
- case 1: /* listOfPropertyReferences */
- if (tag_is_opening(tag_info)) {
- tt = proto_tree_add_text(subtree, tvb, offset, 1, "listOfPropertyReferences");
- subtree = proto_item_add_subtree(tt, ett_bacapp_value);
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- offset = fBACnetPropertyReference (tvb, pinfo, subtree, offset, 1);
- } else if (tag_is_closing(tag_info)) {
- offset += fTagHeaderTree (tvb, subtree, offset,
- &tag_no, &tag_info, &lvt);
- subtree = tree;
- } else {
- /* error condition: let caller handle */
- return offset;
- }
- break;
- default:
- return offset;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint lastoffset = 0;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ proto_item *tt;
+ proto_tree *subtree = tree;
+
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ switch (tag_no) {
+ case 0: /* objectIdentifier */
+ offset = fObjectIdentifier (tvb, pinfo, subtree, offset);
+ break;
+ case 1: /* listOfPropertyReferences */
+ if (tag_is_opening(tag_info)) {
+ tt = proto_tree_add_text(subtree, tvb, offset, 1, "listOfPropertyReferences");
+ subtree = proto_item_add_subtree(tt, ett_bacapp_value);
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ offset = fBACnetPropertyReference (tvb, pinfo, subtree, offset, 1);
+ } else if (tag_is_closing(tag_info)) {
+ offset += fTagHeaderTree (tvb, subtree, offset,
+ &tag_no, &tag_info, &lvt);
+ subtree = tree;
+ } else {
+ /* error condition: let caller handle */
+ return offset;
+ }
+ break;
+ default:
+ return offset;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fReadAccessResult (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0, len;
- guint8 tag_no;
- guint8 tag_info;
- guint32 lvt;
- proto_tree *subtree = tree;
- proto_item *tt;
-
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- /* maybe a listOfReadAccessResults if we spot a closing tag here */
- if (tag_is_closing(tag_info)) {
- offset += len;
- if ((tag_no == 4 || tag_no == 5) && (subtree != tree)) subtree = subtree->parent; /* Value and error have extra subtree */
- continue;
- }
-
- switch (tag_no) {
- case 0: /* objectSpecifier */
- offset = fObjectIdentifier (tvb, pinfo, tree, offset);
- break;
- case 1: /* list of Results */
- if (tag_is_opening(tag_info)) {
- tt = proto_tree_add_text(tree, tvb, offset, 1, "listOfResults");
- subtree = proto_item_add_subtree(tt, ett_bacapp_value);
- offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- break;
- }
- FAULT;
- break;
- case 2: /* propertyIdentifier */
- offset = fPropertyIdentifierValue(tvb, pinfo, subtree, offset, 2);
- break;
- case 5: /* propertyAccessError */
- if (tag_is_opening(tag_info)) {
- tt = proto_tree_add_text(subtree, tvb, offset, 1, "propertyAccessError");
- subtree = proto_item_add_subtree(tt, ett_bacapp_value);
- offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- /* Error Code follows */
- offset = fError(tvb, pinfo, subtree, offset);
- break;
- }
- FAULT;
- break;
- default:
- return offset;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint lastoffset = 0, len;
+ guint8 tag_no;
+ guint8 tag_info;
+ guint32 lvt;
+ proto_tree *subtree = tree;
+ proto_item *tt;
+
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ /* maybe a listOfReadAccessResults if we spot a closing tag here */
+ if (tag_is_closing(tag_info)) {
+ offset += len;
+ if ((tag_no == 4 || tag_no == 5) && (subtree != tree)) subtree = subtree->parent; /* Value and error have extra subtree */
+ continue;
+ }
+
+ switch (tag_no) {
+ case 0: /* objectSpecifier */
+ offset = fObjectIdentifier (tvb, pinfo, tree, offset);
+ break;
+ case 1: /* list of Results */
+ if (tag_is_opening(tag_info)) {
+ tt = proto_tree_add_text(tree, tvb, offset, 1, "listOfResults");
+ subtree = proto_item_add_subtree(tt, ett_bacapp_value);
+ offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ }
+ FAULT;
+ break;
+ case 2: /* propertyIdentifier */
+ offset = fPropertyIdentifierValue(tvb, pinfo, subtree, offset, 2);
+ break;
+ case 5: /* propertyAccessError */
+ if (tag_is_opening(tag_info)) {
+ tt = proto_tree_add_text(subtree, tvb, offset, 1, "propertyAccessError");
+ subtree = proto_item_add_subtree(tt, ett_bacapp_value);
+ offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ /* Error Code follows */
+ offset = fError(tvb, pinfo, subtree, offset);
+ break;
+ }
+ FAULT;
+ break;
+ default:
+ return offset;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fReadPropertyConditionalAck (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- /* listOfReadAccessResults */
- return fReadAccessResult (tvb, pinfo, tree, offset);
+ /* listOfReadAccessResults */
+ return fReadAccessResult (tvb, pinfo, tree, offset);
}
static guint
fCreateObjectRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *subtree, guint offset)
{
- guint lastoffset = 0;
- guint8 tag_no, tag_info;
- guint32 lvt;
-
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
-
- if (tag_no < 2) {
- offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- switch (tag_no) {
- case 0: /* objectSpecifier */
- switch (fTagNo(tvb, offset)) { /* choice of objectType or objectIdentifier */
- case 0: /* objectType */
- offset = fEnumeratedTagSplit (tvb, subtree, offset, "Object Type: ", BACnetObjectType, 128);
- break;
- case 1: /* objectIdentifier */
- offset = fObjectIdentifier (tvb, pinfo, subtree, offset);
- break;
- default:
- break;
- }
- break;
- case 1: /* propertyValue */
- if (tag_is_opening(tag_info)) {
- offset = fBACnetPropertyValue (tvb, pinfo, subtree, offset);
- break;
- }
- FAULT;
- break;
- default:
- break;
- }
- offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint lastoffset = 0;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+
+ if (tag_no < 2) {
+ offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ switch (tag_no) {
+ case 0: /* objectSpecifier */
+ switch (fTagNo(tvb, offset)) { /* choice of objectType or objectIdentifier */
+ case 0: /* objectType */
+ offset = fEnumeratedTagSplit (tvb, subtree, offset, "Object Type: ", BACnetObjectType, 128);
+ break;
+ case 1: /* objectIdentifier */
+ offset = fObjectIdentifier (tvb, pinfo, subtree, offset);
+ break;
+ default:
+ break;
+ }
+ break;
+ case 1: /* propertyValue */
+ if (tag_is_opening(tag_info)) {
+ offset = fBACnetPropertyValue (tvb, pinfo, subtree, offset);
+ break;
+ }
+ FAULT;
+ break;
+ default:
+ break;
+ }
+ offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fCreateObjectAck (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- return fObjectIdentifier (tvb, pinfo, tree, offset);
+ return fObjectIdentifier (tvb, pinfo, tree, offset);
}
static guint
fReadRangeRequest (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint8 tag_no, tag_info;
- guint32 lvt;
- proto_tree *subtree = tree;
- proto_item *tt;
-
- offset = fBACnetObjectPropertyReference(tvb, pinfo, subtree, offset);
-
- if (tvb_reported_length_remaining(tvb, offset) > 0) {
- /* optional range choice */
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_opening(tag_info)) {
- tt = proto_tree_add_text(subtree, tvb, offset, 1, "%s", val_to_str(tag_no, BACnetReadRangeOptions, "unknown range option"));
- subtree = proto_item_add_subtree(tt, ett_bacapp_value);
- offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- switch (tag_no) {
- case 3: /* range byPosition */
- case 6: /* range bySequenceNumber, 2004 spec */
- offset = fApplicationTypes (tvb, pinfo, subtree, offset, "reference Index: ");
- offset = fApplicationTypes (tvb, pinfo, subtree, offset, "reference Count: ");
- break;
- case 4: /* range byTime - deprecated in 2004 */
- case 7: /* 2004 spec */
- offset = fDateTime(tvb, subtree, offset, "reference Date/Time: ");
- offset = fApplicationTypes (tvb, pinfo, subtree, offset, "reference Count: ");
- break;
- case 5: /* range timeRange - deprecated in 2004 */
- offset = fDateTime(tvb, subtree, offset, "beginning Time: ");
- offset = fDateTime(tvb, subtree, offset, "ending Time: ");
- break;
- default:
- break;
- }
- offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- }
- }
- return offset;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ proto_tree *subtree = tree;
+ proto_item *tt;
+
+ offset = fBACnetObjectPropertyReference(tvb, pinfo, subtree, offset);
+
+ if (tvb_reported_length_remaining(tvb, offset) > 0) {
+ /* optional range choice */
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_is_opening(tag_info)) {
+ tt = proto_tree_add_text(subtree, tvb, offset, 1, "%s", val_to_str(tag_no, BACnetReadRangeOptions, "unknown range option"));
+ subtree = proto_item_add_subtree(tt, ett_bacapp_value);
+ offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ switch (tag_no) {
+ case 3: /* range byPosition */
+ case 6: /* range bySequenceNumber, 2004 spec */
+ offset = fApplicationTypes (tvb, pinfo, subtree, offset, "reference Index: ");
+ offset = fApplicationTypes (tvb, pinfo, subtree, offset, "reference Count: ");
+ break;
+ case 4: /* range byTime - deprecated in 2004 */
+ case 7: /* 2004 spec */
+ offset = fDateTime(tvb, subtree, offset, "reference Date/Time: ");
+ offset = fApplicationTypes (tvb, pinfo, subtree, offset, "reference Count: ");
+ break;
+ case 5: /* range timeRange - deprecated in 2004 */
+ offset = fDateTime(tvb, subtree, offset, "beginning Time: ");
+ offset = fDateTime(tvb, subtree, offset, "ending Time: ");
+ break;
+ default:
+ break;
+ }
+ offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ }
+ }
+ return offset;
}
static guint
fReadRangeAck (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint8 tag_no, tag_info;
- guint32 lvt;
- proto_tree *subtree = tree;
- proto_item *tt;
-
- /* set the optional global properties to indicate not-used */
- propertyArrayIndex = -1;
- /* objectIdentifier, propertyIdentifier, and
- OPTIONAL propertyArrayIndex */
- offset = fBACnetObjectPropertyReference(tvb, pinfo, subtree, offset);
- /* resultFlags => BACnetResultFlags ::= BIT STRING */
- offset = fBitStringTagVS (tvb, tree, offset,
- "resultFlags: ",
- BACnetResultFlags);
- /* itemCount */
- offset = fUnsignedTag (tvb, subtree, offset, "item Count: ");
- /* itemData */
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_opening(tag_info)) {
- col_set_writable(pinfo->cinfo, FALSE); /* don't set all infos into INFO column */
- tt = proto_tree_add_text(subtree, tvb, offset, 1, "itemData");
- subtree = proto_item_add_subtree(tt, ett_bacapp_value);
- offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- offset = fAbstractSyntaxNType (tvb, pinfo, subtree, offset);
- offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- }
- /* firstSequenceNumber - OPTIONAL */
- if (tvb_reported_length_remaining(tvb, offset) > 0) {
- offset = fUnsignedTag (tvb, subtree, offset, "first Sequence Number: ");
- }
-
- return offset;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ proto_tree *subtree = tree;
+ proto_item *tt;
+
+ /* set the optional global properties to indicate not-used */
+ propertyArrayIndex = -1;
+ /* objectIdentifier, propertyIdentifier, and
+ OPTIONAL propertyArrayIndex */
+ offset = fBACnetObjectPropertyReference(tvb, pinfo, subtree, offset);
+ /* resultFlags => BACnetResultFlags ::= BIT STRING */
+ offset = fBitStringTagVS (tvb, tree, offset,
+ "resultFlags: ",
+ BACnetResultFlags);
+ /* itemCount */
+ offset = fUnsignedTag (tvb, subtree, offset, "item Count: ");
+ /* itemData */
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_is_opening(tag_info)) {
+ col_set_writable(pinfo->cinfo, FALSE); /* don't set all infos into INFO column */
+ tt = proto_tree_add_text(subtree, tvb, offset, 1, "itemData");
+ subtree = proto_item_add_subtree(tt, ett_bacapp_value);
+ offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ offset = fAbstractSyntaxNType (tvb, pinfo, subtree, offset);
+ offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ }
+ /* firstSequenceNumber - OPTIONAL */
+ if (tvb_reported_length_remaining(tvb, offset) > 0) {
+ offset = fUnsignedTag (tvb, subtree, offset, "first Sequence Number: ");
+ }
+
+ return offset;
}
static guint
fAccessMethod(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0;
- guint32 lvt;
- guint8 tag_no, tag_info;
- proto_item* tt;
- proto_tree* subtree = NULL;
-
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
-
- if (tag_is_opening(tag_info)) {
- tt = proto_tree_add_text(tree, tvb, offset, 1, "%s", val_to_str(tag_no, BACnetFileAccessOption, "invalid access method"));
- subtree = proto_item_add_subtree(tt, ett_bacapp_value);
- offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- offset = fApplicationTypes (tvb, pinfo, subtree, offset, val_to_str(tag_no, BACnetFileStartOption, "invalid option"));
- offset = fApplicationTypes (tvb, pinfo, subtree, offset, val_to_str(tag_no, BACnetFileWriteInfo, "unknown option"));
-
- if (tag_no == 1) {
- while ((tvb_reported_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) {
- /* exit loop if nothing happens inside */
- lastoffset = offset;
- offset = fApplicationTypes (tvb, pinfo, subtree, offset, "Record Data: ");
- }
- }
-
- if ((bacapp_flags & BACAPP_MORE_SEGMENTS) == 0) {
- /* More Flag is not set, so we can look for closing tag in this segment */
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_closing(tag_info)) {
- offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- }
- }
- }
- return offset;
+ guint lastoffset = 0;
+ guint32 lvt;
+ guint8 tag_no, tag_info;
+ proto_item* tt;
+ proto_tree* subtree = NULL;
+
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+
+ if (tag_is_opening(tag_info)) {
+ tt = proto_tree_add_text(tree, tvb, offset, 1, "%s", val_to_str(tag_no, BACnetFileAccessOption, "invalid access method"));
+ subtree = proto_item_add_subtree(tt, ett_bacapp_value);
+ offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ offset = fApplicationTypes (tvb, pinfo, subtree, offset, val_to_str(tag_no, BACnetFileStartOption, "invalid option"));
+ offset = fApplicationTypes (tvb, pinfo, subtree, offset, val_to_str(tag_no, BACnetFileWriteInfo, "unknown option"));
+
+ if (tag_no == 1) {
+ while ((tvb_reported_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) {
+ /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ offset = fApplicationTypes (tvb, pinfo, subtree, offset, "Record Data: ");
+ }
+ }
+
+ if ((bacapp_flags & BACAPP_MORE_SEGMENTS) == 0) {
+ /* More Flag is not set, so we can look for closing tag in this segment */
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ if (tag_is_closing(tag_info)) {
+ offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ }
+ }
+ }
+ return offset;
}
static guint
fAtomicReadFileRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint8 tag_no, tag_info;
- guint32 lvt;
- proto_tree *subtree = tree;
- proto_item *tt;
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+ proto_tree *subtree = tree;
+ proto_item *tt;
- offset = fObjectIdentifier (tvb, pinfo, tree, offset);
+ offset = fObjectIdentifier (tvb, pinfo, tree, offset);
- fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- if (tag_is_opening(tag_info)) {
- tt = proto_tree_add_text(subtree, tvb, offset, 1, "%s", val_to_str(tag_no, BACnetFileAccessOption, "unknown access method"));
- subtree = proto_item_add_subtree(tt, ett_bacapp_value);
- offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- offset = fSignedTag (tvb, subtree, offset, val_to_str(tag_no, BACnetFileStartOption, "unknown option"));
- offset = fUnsignedTag (tvb, subtree, offset, val_to_str(tag_no, BACnetFileRequestCount, "unknown option"));
- offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- }
- return offset;
+ if (tag_is_opening(tag_info)) {
+ tt = proto_tree_add_text(subtree, tvb, offset, 1, "%s", val_to_str(tag_no, BACnetFileAccessOption, "unknown access method"));
+ subtree = proto_item_add_subtree(tt, ett_bacapp_value);
+ offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ offset = fSignedTag (tvb, subtree, offset, val_to_str(tag_no, BACnetFileStartOption, "unknown option"));
+ offset = fUnsignedTag (tvb, subtree, offset, val_to_str(tag_no, BACnetFileRequestCount, "unknown option"));
+ offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ }
+ return offset;
}
static guint
fAtomicWriteFileRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- offset = fObjectIdentifier (tvb, pinfo, tree, offset); /* file Identifier */
- offset = fAccessMethod(tvb, pinfo, tree, offset);
+ offset = fObjectIdentifier (tvb, pinfo, tree, offset); /* file Identifier */
+ offset = fAccessMethod(tvb, pinfo, tree, offset);
- return offset;
+ return offset;
}
static guint
fAtomicWriteFileAck (tvbuff_t *tvb, proto_tree *tree, guint offset)
{
- guint tag_no = fTagNo(tvb, offset);
- return fSignedTag (tvb, tree, offset, val_to_str(tag_no, BACnetFileStartOption, "unknown option"));
+ guint tag_no = fTagNo(tvb, offset);
+ return fSignedTag (tvb, tree, offset, val_to_str(tag_no, BACnetFileStartOption, "unknown option"));
}
static guint
fAtomicReadFileAck (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- offset = fApplicationTypes (tvb, pinfo, tree, offset, "End Of File: ");
- offset = fAccessMethod(tvb,pinfo, tree, offset);
+ offset = fApplicationTypes (tvb, pinfo, tree, offset, "End Of File: ");
+ offset = fAccessMethod(tvb,pinfo, tree, offset);
- return offset;
+ return offset;
}
static guint
fReadPropertyMultipleRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *subtree, guint offset)
{
- col_set_writable(pinfo->cinfo, FALSE); /* don't set all infos into INFO column */
- return fReadAccessSpecification (tvb,pinfo,subtree,offset);
+ col_set_writable(pinfo->cinfo, FALSE); /* don't set all infos into INFO column */
+ return fReadAccessSpecification (tvb,pinfo,subtree,offset);
}
static guint
fReadPropertyMultipleAck (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- col_set_writable(pinfo->cinfo, FALSE); /* don't set all infos into INFO column */
- return fReadAccessResult (tvb,pinfo,tree,offset);
+ col_set_writable(pinfo->cinfo, FALSE); /* don't set all infos into INFO column */
+ return fReadAccessResult (tvb,pinfo,tree,offset);
}
static guint
fConfirmedServiceRequest (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset, gint service_choice)
{
- if (tvb_reported_length_remaining(tvb,offset) <= 0)
- return offset;
-
- switch (service_choice) {
- case 0: /* acknowledgeAlarm */
- offset = fAcknowledgeAlarmRequest (tvb, pinfo, tree, offset);
- break;
- case 1: /* confirmedCOVNotification */
- offset = fConfirmedCOVNotificationRequest (tvb, pinfo, tree, offset);
- break;
- case 2: /* confirmedEventNotification */
- offset = fConfirmedEventNotificationRequest (tvb, pinfo, tree, offset);
- break;
- case 3: /* confirmedGetAlarmSummary conveys no parameters */
- break;
- case 4: /* getEnrollmentSummaryRequest */
- offset = fGetEnrollmentSummaryRequest (tvb, pinfo, tree, offset);
- break;
- case 5: /* subscribeCOVRequest */
- offset = fSubscribeCOVRequest(tvb, pinfo, tree, offset);
- break;
- case 6: /* atomicReadFile-Request */
- offset = fAtomicReadFileRequest(tvb, pinfo, tree, offset);
- break;
- case 7: /* atomicWriteFile-Request */
- offset = fAtomicWriteFileRequest(tvb, pinfo, tree, offset);
- break;
- case 8: /* AddListElement-Request */
- offset = fAddListElementRequest(tvb, pinfo, tree, offset);
- break;
- case 9: /* removeListElement-Request */
- offset = fRemoveListElementRequest(tvb, pinfo, tree, offset);
- break;
- case 10: /* createObjectRequest */
- offset = fCreateObjectRequest(tvb, pinfo, tree, offset);
- break;
- case 11: /* deleteObject */
- offset = fDeleteObjectRequest(tvb, pinfo, tree, offset);
- break;
- case 12:
- offset = fReadPropertyRequest(tvb, pinfo, tree, offset);
- break;
- case 13:
- offset = fReadPropertyConditionalRequest(tvb, pinfo, tree, offset);
- break;
- case 14:
- offset = fReadPropertyMultipleRequest(tvb, pinfo, tree, offset);
- break;
- case 15:
- offset = fWritePropertyRequest(tvb, pinfo, tree, offset);
- break;
- case 16:
- offset = fWritePropertyMultipleRequest(tvb, pinfo, tree, offset);
- break;
- case 17:
- offset = fDeviceCommunicationControlRequest(tvb, tree, offset);
- break;
- case 18:
- offset = fConfirmedPrivateTransferRequest(tvb, pinfo, tree, offset);
- break;
- case 19:
- offset = fConfirmedTextMessageRequest(tvb, pinfo, tree, offset);
- break;
- case 20:
- offset = fReinitializeDeviceRequest(tvb, tree, offset);
- break;
- case 21:
- offset = fVtOpenRequest(tvb, pinfo, tree, offset);
- break;
- case 22:
- offset = fVtCloseRequest (tvb, pinfo, tree, offset);
- break;
- case 23:
- offset = fVtDataRequest (tvb, pinfo, tree, offset);
- break;
- case 24:
- offset = fAuthenticateRequest (tvb, tree, offset);
- break;
- case 25:
- offset = fRequestKeyRequest (tvb, pinfo, tree, offset);
- break;
- case 26:
- offset = fReadRangeRequest (tvb, pinfo, tree, offset);
- break;
- case 27:
- offset = fLifeSafetyOperationRequest(tvb, pinfo, tree, offset, NULL);
- break;
- case 28:
- offset = fSubscribeCOVPropertyRequest(tvb, pinfo, tree, offset);
- break;
- case 29:
- offset = fGetEventInformationRequest (tvb, pinfo, tree, offset);
- break;
- default:
- return offset;
- }
- return offset;
+ if (tvb_reported_length_remaining(tvb,offset) <= 0)
+ return offset;
+
+ switch (service_choice) {
+ case 0: /* acknowledgeAlarm */
+ offset = fAcknowledgeAlarmRequest (tvb, pinfo, tree, offset);
+ break;
+ case 1: /* confirmedCOVNotification */
+ offset = fConfirmedCOVNotificationRequest (tvb, pinfo, tree, offset);
+ break;
+ case 2: /* confirmedEventNotification */
+ offset = fConfirmedEventNotificationRequest (tvb, pinfo, tree, offset);
+ break;
+ case 3: /* confirmedGetAlarmSummary conveys no parameters */
+ break;
+ case 4: /* getEnrollmentSummaryRequest */
+ offset = fGetEnrollmentSummaryRequest (tvb, pinfo, tree, offset);
+ break;
+ case 5: /* subscribeCOVRequest */
+ offset = fSubscribeCOVRequest(tvb, pinfo, tree, offset);
+ break;
+ case 6: /* atomicReadFile-Request */
+ offset = fAtomicReadFileRequest(tvb, pinfo, tree, offset);
+ break;
+ case 7: /* atomicWriteFile-Request */
+ offset = fAtomicWriteFileRequest(tvb, pinfo, tree, offset);
+ break;
+ case 8: /* AddListElement-Request */
+ offset = fAddListElementRequest(tvb, pinfo, tree, offset);
+ break;
+ case 9: /* removeListElement-Request */
+ offset = fRemoveListElementRequest(tvb, pinfo, tree, offset);
+ break;
+ case 10: /* createObjectRequest */
+ offset = fCreateObjectRequest(tvb, pinfo, tree, offset);
+ break;
+ case 11: /* deleteObject */
+ offset = fDeleteObjectRequest(tvb, pinfo, tree, offset);
+ break;
+ case 12:
+ offset = fReadPropertyRequest(tvb, pinfo, tree, offset);
+ break;
+ case 13:
+ offset = fReadPropertyConditionalRequest(tvb, pinfo, tree, offset);
+ break;
+ case 14:
+ offset = fReadPropertyMultipleRequest(tvb, pinfo, tree, offset);
+ break;
+ case 15:
+ offset = fWritePropertyRequest(tvb, pinfo, tree, offset);
+ break;
+ case 16:
+ offset = fWritePropertyMultipleRequest(tvb, pinfo, tree, offset);
+ break;
+ case 17:
+ offset = fDeviceCommunicationControlRequest(tvb, tree, offset);
+ break;
+ case 18:
+ offset = fConfirmedPrivateTransferRequest(tvb, pinfo, tree, offset);
+ break;
+ case 19:
+ offset = fConfirmedTextMessageRequest(tvb, pinfo, tree, offset);
+ break;
+ case 20:
+ offset = fReinitializeDeviceRequest(tvb, tree, offset);
+ break;
+ case 21:
+ offset = fVtOpenRequest(tvb, pinfo, tree, offset);
+ break;
+ case 22:
+ offset = fVtCloseRequest (tvb, pinfo, tree, offset);
+ break;
+ case 23:
+ offset = fVtDataRequest (tvb, pinfo, tree, offset);
+ break;
+ case 24:
+ offset = fAuthenticateRequest (tvb, tree, offset);
+ break;
+ case 25:
+ offset = fRequestKeyRequest (tvb, pinfo, tree, offset);
+ break;
+ case 26:
+ offset = fReadRangeRequest (tvb, pinfo, tree, offset);
+ break;
+ case 27:
+ offset = fLifeSafetyOperationRequest(tvb, pinfo, tree, offset, NULL);
+ break;
+ case 28:
+ offset = fSubscribeCOVPropertyRequest(tvb, pinfo, tree, offset);
+ break;
+ case 29:
+ offset = fGetEventInformationRequest (tvb, pinfo, tree, offset);
+ break;
+ default:
+ return offset;
+ }
+ return offset;
}
static guint
fConfirmedServiceAck (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset, gint service_choice)
{
- if (tvb_reported_length_remaining(tvb,offset) <= 0)
- return offset;
-
- switch (service_choice) {
- case 3: /* confirmedEventNotificationAck */
- offset = fGetAlarmSummaryAck (tvb, pinfo, tree, offset);
- break;
- case 4: /* getEnrollmentSummaryAck */
- offset = fGetEnrollmentSummaryAck (tvb, pinfo, tree, offset);
- break;
- case 6: /* atomicReadFile */
- offset = fAtomicReadFileAck (tvb, pinfo, tree, offset);
- break;
- case 7: /* atomicReadFileAck */
- offset = fAtomicWriteFileAck (tvb, tree, offset);
- break;
- case 10: /* createObject */
- offset = fCreateObjectAck (tvb, pinfo, tree, offset);
- break;
- case 12:
- offset = fReadPropertyAck (tvb, pinfo, tree, offset);
- break;
- case 13:
- offset = fReadPropertyConditionalAck (tvb, pinfo, tree, offset);
- break;
- case 14:
- offset = fReadPropertyMultipleAck (tvb, pinfo, tree, offset);
- break;
- case 18:
- offset = fConfirmedPrivateTransferAck(tvb, pinfo, tree, offset);
- break;
- case 21:
- offset = fVtOpenAck (tvb, pinfo, tree, offset);
- break;
- case 23:
- offset = fVtDataAck (tvb, tree, offset);
- break;
- case 24:
- offset = fAuthenticateAck (tvb, pinfo, tree, offset);
- break;
- case 26:
- offset = fReadRangeAck (tvb, pinfo, tree, offset);
- break;
- case 29:
- offset = fGetEventInformationACK (tvb, pinfo, tree, offset);
- break;
- default:
- return offset;
- }
- return offset;
+ if (tvb_reported_length_remaining(tvb,offset) <= 0)
+ return offset;
+
+ switch (service_choice) {
+ case 3: /* confirmedEventNotificationAck */
+ offset = fGetAlarmSummaryAck (tvb, pinfo, tree, offset);
+ break;
+ case 4: /* getEnrollmentSummaryAck */
+ offset = fGetEnrollmentSummaryAck (tvb, pinfo, tree, offset);
+ break;
+ case 6: /* atomicReadFile */
+ offset = fAtomicReadFileAck (tvb, pinfo, tree, offset);
+ break;
+ case 7: /* atomicReadFileAck */
+ offset = fAtomicWriteFileAck (tvb, tree, offset);
+ break;
+ case 10: /* createObject */
+ offset = fCreateObjectAck (tvb, pinfo, tree, offset);
+ break;
+ case 12:
+ offset = fReadPropertyAck (tvb, pinfo, tree, offset);
+ break;
+ case 13:
+ offset = fReadPropertyConditionalAck (tvb, pinfo, tree, offset);
+ break;
+ case 14:
+ offset = fReadPropertyMultipleAck (tvb, pinfo, tree, offset);
+ break;
+ case 18:
+ offset = fConfirmedPrivateTransferAck(tvb, pinfo, tree, offset);
+ break;
+ case 21:
+ offset = fVtOpenAck (tvb, pinfo, tree, offset);
+ break;
+ case 23:
+ offset = fVtDataAck (tvb, tree, offset);
+ break;
+ case 24:
+ offset = fAuthenticateAck (tvb, pinfo, tree, offset);
+ break;
+ case 26:
+ offset = fReadRangeAck (tvb, pinfo, tree, offset);
+ break;
+ case 29:
+ offset = fGetEventInformationACK (tvb, pinfo, tree, offset);
+ break;
+ default:
+ return offset;
+ }
+ return offset;
}
static guint
fIAmRequest (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- /* BACnetObjectIdentifier */
- offset = fApplicationTypes (tvb, pinfo, tree, offset, "BACnet Object Identifier: ");
+ /* BACnetObjectIdentifier */
+ offset = fApplicationTypes (tvb, pinfo, tree, offset, "BACnet Object Identifier: ");
- /* MaxAPDULengthAccepted */
- offset = fApplicationTypes (tvb, pinfo, tree, offset, "Maximum ADPU Length Accepted: ");
+ /* MaxAPDULengthAccepted */
+ offset = fApplicationTypes (tvb, pinfo, tree, offset, "Maximum ADPU Length Accepted: ");
- /* segmentationSupported */
- offset = fApplicationTypesEnumerated (tvb, pinfo, tree, offset,
- "Segmentation Supported: ", BACnetSegmentation);
+ /* segmentationSupported */
+ offset = fApplicationTypesEnumerated (tvb, pinfo, tree, offset,
+ "Segmentation Supported: ", BACnetSegmentation);
- /* vendor ID */
- return fVendorIdentifier (tvb, pinfo, tree, offset);
+ /* vendor ID */
+ return fVendorIdentifier (tvb, pinfo, tree, offset);
}
static guint
fIHaveRequest (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- /* BACnetDeviceIdentifier */
- offset = fApplicationTypes (tvb, pinfo, tree, offset, "Device Identifier: ");
+ /* BACnetDeviceIdentifier */
+ offset = fApplicationTypes (tvb, pinfo, tree, offset, "Device Identifier: ");
- /* BACnetObjectIdentifier */
- offset = fApplicationTypes (tvb, pinfo, tree, offset, "Object Identifier: ");
+ /* BACnetObjectIdentifier */
+ offset = fApplicationTypes (tvb, pinfo, tree, offset, "Object Identifier: ");
- /* ObjectName */
- return fApplicationTypes (tvb, pinfo, tree, offset, "Object Name: ");
+ /* ObjectName */
+ return fApplicationTypes (tvb, pinfo, tree, offset, "Object Name: ");
}
static guint
fWhoIsRequest (tvbuff_t *tvb, packet_info* pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0;
- guint val;
- guint8 tag_len;
-
- guint8 tag_no, tag_info;
- guint32 lvt;
-
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
-
- tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
-
- switch (tag_no) {
- case 0:
- /* DeviceInstanceRangeLowLimit Optional */
- fUnsigned32(tvb, offset+tag_len, lvt, &val);
- if (col_get_writable(pinfo->cinfo))
- col_append_fstr(pinfo->cinfo, COL_INFO, "%d ", val);
- offset = fDevice_Instance (tvb, tree, offset,
- hf_Device_Instance_Range_Low_Limit);
- break;
- case 1:
- /* DeviceInstanceRangeHighLimit Optional but
- required if DeviceInstanceRangeLowLimit is there */
- fUnsigned32(tvb, offset+tag_len, lvt, &val);
- if (col_get_writable(pinfo->cinfo))
- col_append_fstr(pinfo->cinfo, COL_INFO, "%d ", val);
- offset = fDevice_Instance (tvb, tree, offset,
- hf_Device_Instance_Range_High_Limit);
- break;
- default:
- return offset;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint lastoffset = 0;
+ guint val;
+ guint8 tag_len;
+
+ guint8 tag_no, tag_info;
+ guint32 lvt;
+
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+
+ tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+
+ switch (tag_no) {
+ case 0:
+ /* DeviceInstanceRangeLowLimit Optional */
+ fUnsigned32(tvb, offset+tag_len, lvt, &val);
+ if (col_get_writable(pinfo->cinfo))
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%d ", val);
+ offset = fDevice_Instance (tvb, tree, offset,
+ hf_Device_Instance_Range_Low_Limit);
+ break;
+ case 1:
+ /* DeviceInstanceRangeHighLimit Optional but
+ required if DeviceInstanceRangeLowLimit is there */
+ fUnsigned32(tvb, offset+tag_len, lvt, &val);
+ if (col_get_writable(pinfo->cinfo))
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%d ", val);
+ offset = fDevice_Instance (tvb, tree, offset,
+ hf_Device_Instance_Range_High_Limit);
+ break;
+ default:
+ return offset;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fUnconfirmedServiceRequest (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset, gint service_choice)
{
- if (tvb_reported_length_remaining(tvb,offset) <= 0)
- return offset;
-
- switch (service_choice) {
- case 0: /* I-Am-Request */
- offset = fIAmRequest (tvb, pinfo, tree, offset);
- break;
- case 1: /* i-Have Request */
- offset = fIHaveRequest (tvb, pinfo, tree, offset);
- break;
- case 2: /* unconfirmedCOVNotification */
- offset = fUnconfirmedCOVNotificationRequest (tvb, pinfo, tree, offset);
- break;
- case 3: /* unconfirmedEventNotification */
- offset = fUnconfirmedEventNotificationRequest (tvb, pinfo, tree, offset);
- break;
- case 4: /* unconfirmedPrivateTransfer */
- offset = fUnconfirmedPrivateTransferRequest(tvb, pinfo, tree, offset);
- break;
- case 5: /* unconfirmedTextMessage */
- offset = fUnconfirmedTextMessageRequest(tvb, pinfo, tree, offset);
- break;
- case 6: /* timeSynchronization */
- offset = fTimeSynchronizationRequest (tvb, tree, offset);
- break;
- case 7: /* who-Has */
- offset = fWhoHas (tvb, pinfo, tree, offset);
- break;
- case 8: /* who-Is */
- offset = fWhoIsRequest (tvb, pinfo, tree, offset);
- break;
- case 9: /* utcTimeSynchronization */
- offset = fUTCTimeSynchronizationRequest (tvb, tree, offset);
- break;
- default:
- break;
- }
- return offset;
+ if (tvb_reported_length_remaining(tvb,offset) <= 0)
+ return offset;
+
+ switch (service_choice) {
+ case 0: /* I-Am-Request */
+ offset = fIAmRequest (tvb, pinfo, tree, offset);
+ break;
+ case 1: /* i-Have Request */
+ offset = fIHaveRequest (tvb, pinfo, tree, offset);
+ break;
+ case 2: /* unconfirmedCOVNotification */
+ offset = fUnconfirmedCOVNotificationRequest (tvb, pinfo, tree, offset);
+ break;
+ case 3: /* unconfirmedEventNotification */
+ offset = fUnconfirmedEventNotificationRequest (tvb, pinfo, tree, offset);
+ break;
+ case 4: /* unconfirmedPrivateTransfer */
+ offset = fUnconfirmedPrivateTransferRequest(tvb, pinfo, tree, offset);
+ break;
+ case 5: /* unconfirmedTextMessage */
+ offset = fUnconfirmedTextMessageRequest(tvb, pinfo, tree, offset);
+ break;
+ case 6: /* timeSynchronization */
+ offset = fTimeSynchronizationRequest (tvb, tree, offset);
+ break;
+ case 7: /* who-Has */
+ offset = fWhoHas (tvb, pinfo, tree, offset);
+ break;
+ case 8: /* who-Is */
+ offset = fWhoIsRequest (tvb, pinfo, tree, offset);
+ break;
+ case 9: /* utcTimeSynchronization */
+ offset = fUTCTimeSynchronizationRequest (tvb, tree, offset);
+ break;
+ default:
+ break;
+ }
+ return offset;
}
static guint
fStartConfirmed(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *bacapp_tree, guint offset, guint8 ack,
- gint *svc, proto_item **tt)
-{
- proto_item *tc;
- proto_tree *bacapp_tree_control;
- gint tmp;
- guint extra = 2;
-
- bacapp_seq = 0;
- tmp = (gint) tvb_get_guint8(tvb, offset);
- bacapp_flags = tmp & 0x0f;
-
- if (ack == 0) {
- extra = 3;
- }
- *svc = (gint) tvb_get_guint8(tvb, offset+extra);
- if (bacapp_flags & 0x08)
- *svc = (gint) tvb_get_guint8(tvb, offset+extra+2);
-
- proto_tree_add_item(bacapp_tree, hf_bacapp_type, tvb, offset, 1, ENC_BIG_ENDIAN);
- tc = proto_tree_add_item(bacapp_tree, hf_bacapp_pduflags, tvb, offset, 1, ENC_BIG_ENDIAN);
- bacapp_tree_control = proto_item_add_subtree(tc, ett_bacapp_control);
-
- proto_tree_add_item(bacapp_tree_control, hf_bacapp_SEG, tvb, offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(bacapp_tree_control, hf_bacapp_MOR, tvb, offset, 1, ENC_BIG_ENDIAN);
- if (ack == 0) { /* The following are for ConfirmedRequest, not Complex ack */
- proto_tree_add_item(bacapp_tree_control, hf_bacapp_SA, tvb, offset++, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(bacapp_tree, hf_bacapp_response_segments, tvb,
- offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(bacapp_tree, hf_bacapp_max_adpu_size, tvb,
- offset, 1, ENC_BIG_ENDIAN);
- }
- offset++;
- proto_tree_add_item(bacapp_tree, hf_bacapp_invoke_id, tvb, offset++, 1, ENC_BIG_ENDIAN);
- if (bacapp_flags & 0x08) {
- bacapp_seq = tvb_get_guint8(tvb, offset);
- proto_tree_add_item(bacapp_tree, hf_bacapp_sequence_number, tvb,
- offset++, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(bacapp_tree, hf_bacapp_window_size, tvb,
- offset++, 1, ENC_BIG_ENDIAN);
- }
- *tt = proto_tree_add_item(bacapp_tree, hf_bacapp_service, tvb,
- offset++, 1, ENC_BIG_ENDIAN);
- return offset;
+ gint *svc, proto_item **tt)
+{
+ proto_item *tc;
+ proto_tree *bacapp_tree_control;
+ gint tmp;
+ guint extra = 2;
+
+ bacapp_seq = 0;
+ tmp = (gint) tvb_get_guint8(tvb, offset);
+ bacapp_flags = tmp & 0x0f;
+
+ if (ack == 0) {
+ extra = 3;
+ }
+ *svc = (gint) tvb_get_guint8(tvb, offset+extra);
+ if (bacapp_flags & 0x08)
+ *svc = (gint) tvb_get_guint8(tvb, offset+extra+2);
+
+ proto_tree_add_item(bacapp_tree, hf_bacapp_type, tvb, offset, 1, ENC_BIG_ENDIAN);
+ tc = proto_tree_add_item(bacapp_tree, hf_bacapp_pduflags, tvb, offset, 1, ENC_BIG_ENDIAN);
+ bacapp_tree_control = proto_item_add_subtree(tc, ett_bacapp_control);
+
+ proto_tree_add_item(bacapp_tree_control, hf_bacapp_SEG, tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(bacapp_tree_control, hf_bacapp_MOR, tvb, offset, 1, ENC_BIG_ENDIAN);
+ if (ack == 0) { /* The following are for ConfirmedRequest, not Complex ack */
+ proto_tree_add_item(bacapp_tree_control, hf_bacapp_SA, tvb, offset++, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(bacapp_tree, hf_bacapp_response_segments, tvb,
+ offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(bacapp_tree, hf_bacapp_max_adpu_size, tvb,
+ offset, 1, ENC_BIG_ENDIAN);
+ }
+ offset++;
+ proto_tree_add_item(bacapp_tree, hf_bacapp_invoke_id, tvb, offset++, 1, ENC_BIG_ENDIAN);
+ if (bacapp_flags & 0x08) {
+ bacapp_seq = tvb_get_guint8(tvb, offset);
+ proto_tree_add_item(bacapp_tree, hf_bacapp_sequence_number, tvb,
+ offset++, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(bacapp_tree, hf_bacapp_window_size, tvb,
+ offset++, 1, ENC_BIG_ENDIAN);
+ }
+ *tt = proto_tree_add_item(bacapp_tree, hf_bacapp_service, tvb,
+ offset++, 1, ENC_BIG_ENDIAN);
+ return offset;
}
static guint
fContinueConfirmedRequestPDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *bacapp_tree, guint offset, gint svc)
-{ /* BACnet-Confirmed-Request */
- /* ASHRAE 135-2001 20.1.2 */
+{ /* BACnet-Confirmed-Request */
+ /* ASHRAE 135-2001 20.1.2 */
- return fConfirmedServiceRequest (tvb, pinfo, bacapp_tree, offset, svc);
+ return fConfirmedServiceRequest (tvb, pinfo, bacapp_tree, offset, svc);
}
static guint
fConfirmedRequestPDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *bacapp_tree, guint offset)
-{ /* BACnet-Confirmed-Request */
- /* ASHRAE 135-2001 20.1.2 */
- gint svc;
- proto_item *tt = 0;
+{ /* BACnet-Confirmed-Request */
+ /* ASHRAE 135-2001 20.1.2 */
+ gint svc;
+ proto_item *tt = 0;
- offset = fStartConfirmed(tvb, pinfo, bacapp_tree, offset, 0, &svc, &tt);
- return fContinueConfirmedRequestPDU(tvb, pinfo, bacapp_tree, offset, svc);
+ offset = fStartConfirmed(tvb, pinfo, bacapp_tree, offset, 0, &svc, &tt);
+ return fContinueConfirmedRequestPDU(tvb, pinfo, bacapp_tree, offset, svc);
}
static guint
fUnconfirmedRequestPDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *bacapp_tree, guint offset)
-{ /* BACnet-Unconfirmed-Request-PDU */
- /* ASHRAE 135-2001 20.1.3 */
+{ /* BACnet-Unconfirmed-Request-PDU */
+ /* ASHRAE 135-2001 20.1.3 */
- gint tmp;
+ gint tmp;
- proto_tree_add_item(bacapp_tree, hf_bacapp_type, tvb, offset++, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(bacapp_tree, hf_bacapp_type, tvb, offset++, 1, ENC_BIG_ENDIAN);
- tmp = tvb_get_guint8(tvb, offset);
- proto_tree_add_item(bacapp_tree, hf_bacapp_uservice, tvb,
- offset++, 1, ENC_BIG_ENDIAN);
- /* Service Request follows... Variable Encoding 20.2ff */
- return fUnconfirmedServiceRequest (tvb, pinfo, bacapp_tree, offset, tmp);
+ tmp = tvb_get_guint8(tvb, offset);
+ proto_tree_add_item(bacapp_tree, hf_bacapp_uservice, tvb,
+ offset++, 1, ENC_BIG_ENDIAN);
+ /* Service Request follows... Variable Encoding 20.2ff */
+ return fUnconfirmedServiceRequest (tvb, pinfo, bacapp_tree, offset, tmp);
}
static guint
fSimpleAckPDU(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *bacapp_tree, guint offset)
-{ /* BACnet-Simple-Ack-PDU */
- /* ASHRAE 135-2001 20.1.4 */
+{ /* BACnet-Simple-Ack-PDU */
+ /* ASHRAE 135-2001 20.1.4 */
- proto_tree_add_item(bacapp_tree, hf_bacapp_type, tvb, offset++, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(bacapp_tree, hf_bacapp_type, tvb, offset++, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(bacapp_tree, hf_bacapp_invoke_id, tvb,
- offset++, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(bacapp_tree, hf_bacapp_service, tvb,
- offset++, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(bacapp_tree, hf_bacapp_invoke_id, tvb,
+ offset++, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(bacapp_tree, hf_bacapp_service, tvb,
+ offset++, 1, ENC_BIG_ENDIAN);
- return offset;
+ return offset;
}
static guint
fContinueComplexAckPDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *bacapp_tree, guint offset, gint svc)
-{ /* BACnet-Complex-Ack-PDU */
- /* ASHRAE 135-2001 20.1.5 */
+{ /* BACnet-Complex-Ack-PDU */
+ /* ASHRAE 135-2001 20.1.5 */
- /* Service ACK follows... */
- return fConfirmedServiceAck (tvb, pinfo, bacapp_tree, offset, svc);
+ /* Service ACK follows... */
+ return fConfirmedServiceAck (tvb, pinfo, bacapp_tree, offset, svc);
}
static guint
fComplexAckPDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *bacapp_tree, guint offset)
-{ /* BACnet-Complex-Ack-PDU */
- /* ASHRAE 135-2001 20.1.5 */
- gint svc;
- proto_item *tt = 0;
+{ /* BACnet-Complex-Ack-PDU */
+ /* ASHRAE 135-2001 20.1.5 */
+ gint svc;
+ proto_item *tt = 0;
- offset = fStartConfirmed(tvb, pinfo, bacapp_tree, offset, 1, &svc, &tt);
- return fContinueComplexAckPDU(tvb, pinfo, bacapp_tree, offset, svc);
+ offset = fStartConfirmed(tvb, pinfo, bacapp_tree, offset, 1, &svc, &tt);
+ return fContinueComplexAckPDU(tvb, pinfo, bacapp_tree, offset, svc);
}
static guint
fSegmentAckPDU(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *bacapp_tree, guint offset)
-{ /* BACnet-SegmentAck-PDU */
- /* ASHRAE 135-2001 20.1.6 */
+{ /* BACnet-SegmentAck-PDU */
+ /* ASHRAE 135-2001 20.1.6 */
- proto_item *tc;
- proto_tree *bacapp_tree_control;
+ proto_item *tc;
+ proto_tree *bacapp_tree_control;
- tc = proto_tree_add_item(bacapp_tree, hf_bacapp_type, tvb, offset, 1, ENC_BIG_ENDIAN);
- bacapp_tree_control = proto_item_add_subtree(tc, ett_bacapp);
+ tc = proto_tree_add_item(bacapp_tree, hf_bacapp_type, tvb, offset, 1, ENC_BIG_ENDIAN);
+ bacapp_tree_control = proto_item_add_subtree(tc, ett_bacapp);
- proto_tree_add_item(bacapp_tree_control, hf_bacapp_NAK, tvb, offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(bacapp_tree_control, hf_bacapp_SRV, tvb, offset++, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(bacapp_tree_control, hf_bacapp_invoke_id, tvb,
- offset++, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(bacapp_tree_control, hf_bacapp_sequence_number, tvb,
- offset++, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(bacapp_tree_control, hf_bacapp_window_size, tvb,
- offset++, 1, ENC_BIG_ENDIAN);
- return offset;
+ proto_tree_add_item(bacapp_tree_control, hf_bacapp_NAK, tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(bacapp_tree_control, hf_bacapp_SRV, tvb, offset++, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(bacapp_tree_control, hf_bacapp_invoke_id, tvb,
+ offset++, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(bacapp_tree_control, hf_bacapp_sequence_number, tvb,
+ offset++, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(bacapp_tree_control, hf_bacapp_window_size, tvb,
+ offset++, 1, ENC_BIG_ENDIAN);
+ return offset;
}
static guint
fContextTaggedError(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint8 tag_info = 0;
- guint8 parsed_tag = 0;
- guint32 lvt = 0;
- offset += fTagHeaderTree(tvb, tree, offset, &parsed_tag, &tag_info, &lvt);
- offset = fError(tvb, pinfo, tree, offset);
- return offset + fTagHeaderTree(tvb, tree, offset, &parsed_tag, &tag_info, &lvt);
+ guint8 tag_info = 0;
+ guint8 parsed_tag = 0;
+ guint32 lvt = 0;
+
+ offset += fTagHeaderTree(tvb, tree, offset, &parsed_tag, &tag_info, &lvt);
+ offset = fError(tvb, pinfo, tree, offset);
+ return offset + fTagHeaderTree(tvb, tree, offset, &parsed_tag, &tag_info, &lvt);
}
static guint
fConfirmedPrivateTransferError(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0;
- guint8 tag_no = 0, tag_info = 0;
- guint32 lvt = 0;
- proto_tree *subtree = tree;
- proto_item *tt;
-
- guint vendor_identifier = 0;
- guint service_number = 0;
- guint8 tag_len = 0;
-
- while (tvb_reported_length_remaining(tvb, offset)) {
- /* exit loop if nothing happens inside */
- lastoffset = offset;
- tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
- switch (tag_no) {
- case 0: /* errorType */
- offset = fContextTaggedError(tvb, pinfo, subtree, offset);
- break;
- case 1: /* vendorID */
- fUnsigned32(tvb, offset+tag_len, lvt, &vendor_identifier);
- if (col_get_writable(pinfo->cinfo))
- col_append_fstr(pinfo->cinfo, COL_INFO, "V=%u ", vendor_identifier);
- offset = fVendorIdentifier (tvb, pinfo, subtree, offset);
- break;
- case 2: /* serviceNumber */
- fUnsigned32(tvb, offset+tag_len, lvt, &service_number);
- if (col_get_writable(pinfo->cinfo))
- col_append_fstr(pinfo->cinfo, COL_INFO, "SN=%u ", service_number);
- offset = fUnsignedTag (tvb, subtree, offset, "service Number: ");
- break;
- case 3: /* errorParameters */
- if (tag_is_opening(tag_info)) {
- tt = proto_tree_add_text(subtree, tvb, offset, 1,
- "error Parameters");
- subtree = proto_item_add_subtree(tt, ett_bacapp_value);
- propertyIdentifier = -1;
- offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
- offset = fAbstractSyntaxNType (tvb, pinfo, subtree, offset);
- } else if (tag_is_closing(tag_info)) {
- offset += fTagHeaderTree (tvb, subtree, offset,
- &tag_no, &tag_info, &lvt);
- subtree = tree;
- } else {
- /* error condition: let caller handle */
- return offset;
- }
- break;
- default:
- return offset;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint lastoffset = 0;
+ guint8 tag_no = 0, tag_info = 0;
+ guint32 lvt = 0;
+ proto_tree *subtree = tree;
+ proto_item *tt;
+
+ guint vendor_identifier = 0;
+ guint service_number = 0;
+ guint8 tag_len = 0;
+
+ while (tvb_reported_length_remaining(tvb, offset) > 0) {
+ /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
+ switch (tag_no) {
+ case 0: /* errorType */
+ offset = fContextTaggedError(tvb, pinfo, subtree, offset);
+ break;
+ case 1: /* vendorID */
+ fUnsigned32(tvb, offset+tag_len, lvt, &vendor_identifier);
+ if (col_get_writable(pinfo->cinfo))
+ col_append_fstr(pinfo->cinfo, COL_INFO, "V=%u ", vendor_identifier);
+ offset = fVendorIdentifier (tvb, pinfo, subtree, offset);
+ break;
+ case 2: /* serviceNumber */
+ fUnsigned32(tvb, offset+tag_len, lvt, &service_number);
+ if (col_get_writable(pinfo->cinfo))
+ col_append_fstr(pinfo->cinfo, COL_INFO, "SN=%u ", service_number);
+ offset = fUnsignedTag (tvb, subtree, offset, "service Number: ");
+ break;
+ case 3: /* errorParameters */
+ if (tag_is_opening(tag_info)) {
+ tt = proto_tree_add_text(subtree, tvb, offset, 1,
+ "error Parameters");
+ subtree = proto_item_add_subtree(tt, ett_bacapp_value);
+ propertyIdentifier = -1;
+ offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt);
+ offset = fAbstractSyntaxNType (tvb, pinfo, subtree, offset);
+ } else if (tag_is_closing(tag_info)) {
+ offset += fTagHeaderTree (tvb, subtree, offset,
+ &tag_no, &tag_info, &lvt);
+ subtree = tree;
+ } else {
+ /* error condition: let caller handle */
+ return offset;
+ }
+ break;
+ default:
+ return offset;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fCreateObjectError(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0;
+ guint lastoffset = 0;
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- switch (fTagNo(tvb, offset)) {
- case 0: /* errorType */
- offset = fContextTaggedError(tvb, pinfo, tree, offset);
- break;
- case 1: /* firstFailedElementNumber */
- offset = fUnsignedTag (tvb,tree,offset,"first failed element number: ");
- break;
- default:
- return offset;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ switch (fTagNo(tvb, offset)) {
+ case 0: /* errorType */
+ offset = fContextTaggedError(tvb, pinfo, tree, offset);
+ break;
+ case 1: /* firstFailedElementNumber */
+ offset = fUnsignedTag (tvb,tree,offset,"first failed element number: ");
+ break;
+ default:
+ return offset;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fChangeListError(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- /* Identical to CreateObjectError */
- return fCreateObjectError(tvb, pinfo, tree, offset);
+ /* Identical to CreateObjectError */
+ return fCreateObjectError(tvb, pinfo, tree, offset);
}
static guint
fVTCloseError(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint8 tag_no = 0, tag_info = 0;
- guint32 lvt = 0;
+ guint8 tag_no = 0, tag_info = 0;
+ guint32 lvt = 0;
- if (fTagNo(tvb, offset) == 0) {
- /* errorType */
- offset = fContextTaggedError(tvb, pinfo, tree,offset);
- if (fTagNo(tvb, offset) == 1) {
- /* listOfVTSessionIdentifiers [OPTIONAL] */
- offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &tag_info, &lvt);
- offset = fVtCloseRequest (tvb, pinfo, tree, offset);
- offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &tag_info, &lvt);
- }
- }
- /* should report bad packet if initial tag wasn't 0 */
- return offset;
+ if (fTagNo(tvb, offset) == 0) {
+ /* errorType */
+ offset = fContextTaggedError(tvb, pinfo, tree,offset);
+ if (fTagNo(tvb, offset) == 1) {
+ /* listOfVTSessionIdentifiers [OPTIONAL] */
+ offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ offset = fVtCloseRequest (tvb, pinfo, tree, offset);
+ offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ }
+ }
+ /* should report bad packet if initial tag wasn't 0 */
+ return offset;
}
static guint
fWritePropertyMultipleError(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- guint lastoffset = 0;
- guint8 tag_no = 0, tag_info = 0;
- guint32 lvt = 0;
-
- col_set_writable(pinfo->cinfo, FALSE); /* don't set all infos into INFO column */
- while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
- lastoffset = offset;
- switch (fTagNo(tvb, offset)) {
- case 0: /* errorType */
- offset = fContextTaggedError(tvb, pinfo, tree, offset);
- break;
- case 1: /* firstFailedWriteAttempt */
- offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &tag_info, &lvt);
- offset = fBACnetObjectPropertyReference(tvb, pinfo, tree, offset);
- offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &tag_info, &lvt);
- break;
- default:
- return offset;
- }
- if (offset == lastoffset) break; /* nothing happened, exit loop */
- }
- return offset;
+ guint lastoffset = 0;
+ guint8 tag_no = 0, tag_info = 0;
+ guint32 lvt = 0;
+
+ col_set_writable(pinfo->cinfo, FALSE); /* don't set all infos into INFO column */
+ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
+ lastoffset = offset;
+ switch (fTagNo(tvb, offset)) {
+ case 0: /* errorType */
+ offset = fContextTaggedError(tvb, pinfo, tree, offset);
+ break;
+ case 1: /* firstFailedWriteAttempt */
+ offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ offset = fBACnetObjectPropertyReference(tvb, pinfo, tree, offset);
+ offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &tag_info, &lvt);
+ break;
+ default:
+ return offset;
+ }
+ if (offset == lastoffset) break; /* nothing happened, exit loop */
+ }
+ return offset;
}
static guint
fError (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
- offset = fApplicationTypesEnumeratedSplit (tvb, pinfo, tree, offset,
- "error Class: ", BACnetErrorClass, 64);
- return fApplicationTypesEnumeratedSplit (tvb, pinfo, tree, offset,
- "error Code: ", BACnetErrorCode, 256);
+ offset = fApplicationTypesEnumeratedSplit (tvb, pinfo, tree, offset,
+ "error Class: ", BACnetErrorClass, 64);
+ return fApplicationTypesEnumeratedSplit (tvb, pinfo, tree, offset,
+ "error Code: ", BACnetErrorCode, 256);
}
static guint
fBACnetError (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset, guint service)
{
- switch (service) {
- case 8: /* no break here !!!! */
- case 9:
- offset = fChangeListError (tvb, pinfo, tree, offset);
- break;
- case 10:
- offset = fCreateObjectError (tvb, pinfo, tree, offset);
- break;
- case 16:
- offset = fWritePropertyMultipleError (tvb, pinfo, tree, offset);
- break;
- case 18:
- offset = fConfirmedPrivateTransferError (tvb,pinfo,tree,offset);
- break;
- case 22:
- offset = fVTCloseError (tvb, pinfo, tree, offset);
- break;
- default:
- return fError (tvb, pinfo, tree, offset);
- }
- return offset;
+ switch (service) {
+ case 8: /* no break here !!!! */
+ case 9:
+ offset = fChangeListError (tvb, pinfo, tree, offset);
+ break;
+ case 10:
+ offset = fCreateObjectError (tvb, pinfo, tree, offset);
+ break;
+ case 16:
+ offset = fWritePropertyMultipleError (tvb, pinfo, tree, offset);
+ break;
+ case 18:
+ offset = fConfirmedPrivateTransferError (tvb,pinfo,tree,offset);
+ break;
+ case 22:
+ offset = fVTCloseError (tvb, pinfo, tree, offset);
+ break;
+ default:
+ return fError (tvb, pinfo, tree, offset);
+ }
+ return offset;
}
static guint
fErrorPDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *bacapp_tree, guint offset)
-{ /* BACnet-Error-PDU */
- /* ASHRAE 135-2001 20.1.7 */
+{ /* BACnet-Error-PDU */
+ /* ASHRAE 135-2001 20.1.7 */
- proto_item *tc;
- proto_tree *bacapp_tree_control;
- guint8 tmp;
+ proto_item *tc;
+ proto_tree *bacapp_tree_control;
+ guint8 tmp;
- tc = proto_tree_add_item(bacapp_tree, hf_bacapp_type, tvb, offset++, 1, ENC_BIG_ENDIAN);
- bacapp_tree_control = proto_item_add_subtree(tc, ett_bacapp);
+ tc = proto_tree_add_item(bacapp_tree, hf_bacapp_type, tvb, offset++, 1, ENC_BIG_ENDIAN);
+ bacapp_tree_control = proto_item_add_subtree(tc, ett_bacapp);
- proto_tree_add_item(bacapp_tree_control, hf_bacapp_invoke_id, tvb,
- offset++, 1, ENC_BIG_ENDIAN);
- tmp = tvb_get_guint8(tvb, offset);
- proto_tree_add_item(bacapp_tree_control, hf_bacapp_service, tvb,
- offset++, 1, ENC_BIG_ENDIAN);
- /* Error Handling follows... */
- return fBACnetError (tvb, pinfo, bacapp_tree, offset, tmp);
+ proto_tree_add_item(bacapp_tree_control, hf_bacapp_invoke_id, tvb,
+ offset++, 1, ENC_BIG_ENDIAN);
+ tmp = tvb_get_guint8(tvb, offset);
+ proto_tree_add_item(bacapp_tree_control, hf_bacapp_service, tvb,
+ offset++, 1, ENC_BIG_ENDIAN);
+ /* Error Handling follows... */
+ return fBACnetError (tvb, pinfo, bacapp_tree, offset, tmp);
}
static guint
fRejectPDU(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *bacapp_tree, guint offset)
-{ /* BACnet-Reject-PDU */
- /* ASHRAE 135-2001 20.1.8 */
+{ /* BACnet-Reject-PDU */
+ /* ASHRAE 135-2001 20.1.8 */
- proto_item *tc;
- proto_tree *bacapp_tree_control;
+ proto_item *tc;
+ proto_tree *bacapp_tree_control;
- tc = proto_tree_add_item(bacapp_tree, hf_bacapp_type, tvb, offset++, 1, ENC_BIG_ENDIAN);
- bacapp_tree_control = proto_item_add_subtree(tc, ett_bacapp);
+ tc = proto_tree_add_item(bacapp_tree, hf_bacapp_type, tvb, offset++, 1, ENC_BIG_ENDIAN);
+ bacapp_tree_control = proto_item_add_subtree(tc, ett_bacapp);
- proto_tree_add_item(bacapp_tree_control, hf_bacapp_invoke_id, tvb,
- offset++, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(bacapp_tree_control, hf_BACnetRejectReason, tvb,
- offset++, 1, ENC_BIG_ENDIAN);
- return offset;
+ proto_tree_add_item(bacapp_tree_control, hf_bacapp_invoke_id, tvb,
+ offset++, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(bacapp_tree_control, hf_BACnetRejectReason, tvb,
+ offset++, 1, ENC_BIG_ENDIAN);
+ return offset;
}
static guint
fAbortPDU(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *bacapp_tree, guint offset)
-{ /* BACnet-Abort-PDU */
- /* ASHRAE 135-2001 20.1.9 */
+{ /* BACnet-Abort-PDU */
+ /* ASHRAE 135-2001 20.1.9 */
- proto_item *tc;
- proto_tree *bacapp_tree_control;
+ proto_item *tc;
+ proto_tree *bacapp_tree_control;
- tc = proto_tree_add_item(bacapp_tree, hf_bacapp_type, tvb, offset, 1, ENC_BIG_ENDIAN);
- bacapp_tree_control = proto_item_add_subtree(tc, ett_bacapp);
+ tc = proto_tree_add_item(bacapp_tree, hf_bacapp_type, tvb, offset, 1, ENC_BIG_ENDIAN);
+ bacapp_tree_control = proto_item_add_subtree(tc, ett_bacapp);
- proto_tree_add_item(bacapp_tree_control, hf_bacapp_SRV, tvb, offset++, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(bacapp_tree_control, hf_bacapp_invoke_id, tvb,
- offset++, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(bacapp_tree_control, hf_BACnetAbortReason, tvb,
- offset++, 1, ENC_BIG_ENDIAN);
- return offset;
+ proto_tree_add_item(bacapp_tree_control, hf_bacapp_SRV, tvb, offset++, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(bacapp_tree_control, hf_bacapp_invoke_id, tvb,
+ offset++, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(bacapp_tree_control, hf_BACnetAbortReason, tvb,
+ offset++, 1, ENC_BIG_ENDIAN);
+ return offset;
}
static guint
do_the_dissection(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
- guint8 flag, bacapp_type;
- guint offset = 0;
-
- flag = (gint) tvb_get_guint8(tvb, 0);
- bacapp_type = (flag >> 4) & 0x0f;
-
- if (tvb == NULL) {
- return 0;
- }
-
- /* ASHRAE 135-2001 20.1.1 */
- switch (bacapp_type) {
- case BACAPP_TYPE_CONFIRMED_SERVICE_REQUEST: /* BACnet-Confirmed-Service-Request */
- offset = fConfirmedRequestPDU(tvb, pinfo, tree, offset);
- break;
- case BACAPP_TYPE_UNCONFIRMED_SERVICE_REQUEST: /* BACnet-Unconfirmed-Request-PDU */
- offset = fUnconfirmedRequestPDU(tvb, pinfo, tree, offset);
- break;
- case BACAPP_TYPE_SIMPLE_ACK: /* BACnet-Simple-Ack-PDU */
- offset = fSimpleAckPDU(tvb, pinfo, tree, offset);
- break;
- case BACAPP_TYPE_COMPLEX_ACK: /* BACnet-Complex-Ack-PDU */
- offset = fComplexAckPDU(tvb, pinfo, tree, offset);
- break;
- case BACAPP_TYPE_SEGMENT_ACK: /* BACnet-SegmentAck-PDU */
- offset = fSegmentAckPDU(tvb, pinfo, tree, offset);
- break;
- case BACAPP_TYPE_ERROR: /* BACnet-Error-PDU */
- offset = fErrorPDU(tvb, pinfo, tree, offset);
- break;
- case BACAPP_TYPE_REJECT: /* BACnet-Reject-PDU */
- offset = fRejectPDU(tvb, pinfo, tree, offset);
- break;
- case BACAPP_TYPE_ABORT: /* BACnet-Abort-PDU */
- offset = fAbortPDU(tvb, pinfo, tree, offset);
- break;
- }
- return offset;
+ guint8 flag, bacapp_type;
+ guint offset = 0;
+
+ flag = (gint) tvb_get_guint8(tvb, 0);
+ bacapp_type = (flag >> 4) & 0x0f;
+
+ if (tvb == NULL) {
+ return 0;
+ }
+
+ /* ASHRAE 135-2001 20.1.1 */
+ switch (bacapp_type) {
+ case BACAPP_TYPE_CONFIRMED_SERVICE_REQUEST: /* BACnet-Confirmed-Service-Request */
+ offset = fConfirmedRequestPDU(tvb, pinfo, tree, offset);
+ break;
+ case BACAPP_TYPE_UNCONFIRMED_SERVICE_REQUEST: /* BACnet-Unconfirmed-Request-PDU */
+ offset = fUnconfirmedRequestPDU(tvb, pinfo, tree, offset);
+ break;
+ case BACAPP_TYPE_SIMPLE_ACK: /* BACnet-Simple-Ack-PDU */
+ offset = fSimpleAckPDU(tvb, pinfo, tree, offset);
+ break;
+ case BACAPP_TYPE_COMPLEX_ACK: /* BACnet-Complex-Ack-PDU */
+ offset = fComplexAckPDU(tvb, pinfo, tree, offset);
+ break;
+ case BACAPP_TYPE_SEGMENT_ACK: /* BACnet-SegmentAck-PDU */
+ offset = fSegmentAckPDU(tvb, pinfo, tree, offset);
+ break;
+ case BACAPP_TYPE_ERROR: /* BACnet-Error-PDU */
+ offset = fErrorPDU(tvb, pinfo, tree, offset);
+ break;
+ case BACAPP_TYPE_REJECT: /* BACnet-Reject-PDU */
+ offset = fRejectPDU(tvb, pinfo, tree, offset);
+ break;
+ case BACAPP_TYPE_ABORT: /* BACnet-Abort-PDU */
+ offset = fAbortPDU(tvb, pinfo, tree, offset);
+ break;
+ }
+ return offset;
}
static void
dissect_bacapp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
- guint8 flag, bacapp_type;
- guint save_fragmented = FALSE, data_offset = 0, /*bacapp_apdu_size,*/ fragment = FALSE;
- tvbuff_t* new_tvb = NULL;
- guint offset = 0;
- guint8 bacapp_seqno = 0;
- guint8 bacapp_service, bacapp_reason/*, bacapp_prop_win_size*/;
- guint8 bacapp_invoke_id = 0;
- proto_item *ti;
- proto_tree *bacapp_tree = NULL;
-
- gint svc = 0;
- proto_item *tt = 0;
- gint8 ack = 0;
-
- /* Strings for BACnet Statistics */
- const gchar errstr[]="ERROR: ";
- const gchar rejstr[]="REJECTED: ";
- const gchar abortstr[]="ABORTED: ";
- const gchar sackstr[]=" (SimpleAck)";
- const gchar cackstr[]=" (ComplexAck)";
- const gchar uconfsreqstr[]=" (Unconfirmed Service Request)";
- const gchar confsreqstr[]=" (Confirmed Service Request)";
-
- col_set_str(pinfo->cinfo, COL_PROTOCOL, "BACnet-APDU");
- col_clear (pinfo->cinfo, COL_INFO);
-
- flag = tvb_get_guint8(tvb, 0);
- bacapp_type = (flag >> 4) & 0x0f;
-
- /* show some descriptive text in the INFO column */
- col_add_fstr(pinfo->cinfo, COL_INFO, "%-16s",
- val_to_str(bacapp_type, BACnetTypeName, "# unknown APDU #"));
-
- bacinfo.service_type = NULL;
- bacinfo.invoke_id = NULL;
- bacinfo.instance_ident = NULL;
- bacinfo.object_ident = NULL;
-
- switch (bacapp_type)
- {
- case BACAPP_TYPE_CONFIRMED_SERVICE_REQUEST:
- /* segmented messages have 2 additional bytes */
- if (flag & BACAPP_SEGMENTED_REQUEST) {
- fragment = TRUE;
- ack = 0;
- /* bacapp_apdu_size = fGetMaxAPDUSize(tvb_get_guint8(tvb, offset + 1)); */ /* has 16 values, reserved are 50 Bytes */
- bacapp_invoke_id = tvb_get_guint8(tvb, offset + 2);
- bacapp_seqno = tvb_get_guint8(tvb, offset + 3);
- /* bacapp_prop_win_size = tvb_get_guint8(tvb, offset + 4); */
- bacapp_service = tvb_get_guint8(tvb, offset + 5);
- data_offset = 6;
- } else {
- bacapp_invoke_id = tvb_get_guint8(tvb, offset + 2);
- bacapp_service = tvb_get_guint8(tvb, offset + 3);
- }
- col_append_fstr(pinfo->cinfo, COL_INFO, "%s[%3u] ",
- val_to_str(bacapp_service,
- BACnetConfirmedServiceChoice,
- bacapp_unknown_service_str),bacapp_invoke_id);
-
- updateBacnetInfoValue(BACINFO_INVOKEID,
- ep_strdup_printf("Invoke ID: %d", bacapp_invoke_id));
-
- updateBacnetInfoValue(BACINFO_SERVICE,
- ep_strconcat(val_to_str(bacapp_service,
- BACnetConfirmedServiceChoice,
- bacapp_unknown_service_str),
- confsreqstr, NULL));
- break;
- case BACAPP_TYPE_UNCONFIRMED_SERVICE_REQUEST:
- bacapp_service = tvb_get_guint8(tvb, offset + 1);
- col_append_fstr(pinfo->cinfo, COL_INFO, "%s ",
- val_to_str(bacapp_service,
- BACnetUnconfirmedServiceChoice,
- bacapp_unknown_service_str));
-
- updateBacnetInfoValue(BACINFO_SERVICE,
- ep_strconcat(val_to_str(bacapp_service,
- BACnetUnconfirmedServiceChoice,
- bacapp_unknown_service_str),
- uconfsreqstr, NULL));
- break;
- case BACAPP_TYPE_SIMPLE_ACK:
- bacapp_invoke_id = tvb_get_guint8(tvb, offset + 1);
- bacapp_service = tvb_get_guint8(tvb, offset + 2);
- col_append_fstr(pinfo->cinfo, COL_INFO, "%s[%3u] ", /* "original-invokeID" replaced */
- val_to_str(bacapp_service,
- BACnetConfirmedServiceChoice,
- bacapp_unknown_service_str), bacapp_invoke_id);
-
- updateBacnetInfoValue(BACINFO_INVOKEID,
- ep_strdup_printf("Invoke ID: %d", bacapp_invoke_id));
-
- updateBacnetInfoValue(BACINFO_SERVICE,
- ep_strconcat(val_to_str(bacapp_service,
- BACnetConfirmedServiceChoice,
- bacapp_unknown_service_str),
- sackstr, NULL));
- break;
- case BACAPP_TYPE_COMPLEX_ACK:
- /* segmented messages have 2 additional bytes */
- if (flag & BACAPP_SEGMENTED_REQUEST) {
- fragment = TRUE;
- ack = 1;
- /* bacapp_apdu_size = fGetMaxAPDUSize(0); */ /* has minimum of 50 Bytes */
- bacapp_invoke_id = tvb_get_guint8(tvb, offset + 1);
- bacapp_seqno = tvb_get_guint8(tvb, offset + 2);
- /* bacapp_prop_win_size = tvb_get_guint8(tvb, offset + 3); */
- bacapp_service = tvb_get_guint8(tvb, offset + 4);
- data_offset = 5;
- } else {
- bacapp_invoke_id = tvb_get_guint8(tvb, offset + 1);
- bacapp_service = tvb_get_guint8(tvb, offset + 2);
- }
- col_append_fstr(pinfo->cinfo, COL_INFO, "%s[%3u] ", /* "original-invokeID" replaced */
- val_to_str(bacapp_service,
- BACnetConfirmedServiceChoice,
- bacapp_unknown_service_str), bacapp_invoke_id);
-
- updateBacnetInfoValue(BACINFO_INVOKEID,
- ep_strdup_printf("Invoke ID: %d", bacapp_invoke_id));
-
- updateBacnetInfoValue(BACINFO_SERVICE,
- ep_strconcat(val_to_str(bacapp_service,
- BACnetConfirmedServiceChoice,
- bacapp_unknown_service_str),
- cackstr, NULL));
- break;
- case BACAPP_TYPE_SEGMENT_ACK:
- /* nothing more to add */
- break;
- case BACAPP_TYPE_ERROR:
- bacapp_invoke_id = tvb_get_guint8(tvb, offset + 1);
- bacapp_service = tvb_get_guint8(tvb, offset + 2);
- col_append_fstr(pinfo->cinfo, COL_INFO, "%s[%3u] ", /* "original-invokeID" replaced */
- val_to_str(bacapp_service,
- BACnetConfirmedServiceChoice,
- bacapp_unknown_service_str), bacapp_invoke_id);
-
- updateBacnetInfoValue(BACINFO_INVOKEID,
- ep_strdup_printf("Invoke ID: %d", bacapp_invoke_id));
-
- updateBacnetInfoValue(BACINFO_SERVICE,
- ep_strconcat(errstr,
- val_to_str(bacapp_service,
- BACnetConfirmedServiceChoice,
- bacapp_unknown_service_str),
- NULL));
- break;
- case BACAPP_TYPE_REJECT:
- bacapp_invoke_id = tvb_get_guint8(tvb, offset + 1);
- bacapp_reason = tvb_get_guint8(tvb, offset + 2);
- col_append_fstr(pinfo->cinfo, COL_INFO, "%s[%3u] ", /* "original-invokeID" replaced */
- val_to_split_str(bacapp_reason,
- 64,
- BACnetRejectReason,
- ASHRAE_Reserved_Fmt,
- Vendor_Proprietary_Fmt), bacapp_invoke_id);
-
- updateBacnetInfoValue(BACINFO_INVOKEID,
- ep_strdup_printf("Invoke ID: %d", bacapp_invoke_id));
-
- updateBacnetInfoValue(BACINFO_SERVICE,
- ep_strconcat(rejstr,
- val_to_split_str(bacapp_reason, 64,
- BACnetRejectReason,
- ASHRAE_Reserved_Fmt,
- Vendor_Proprietary_Fmt),
- NULL));
- break;
- case BACAPP_TYPE_ABORT:
- bacapp_invoke_id = tvb_get_guint8(tvb, offset + 1);
- bacapp_reason = tvb_get_guint8(tvb, offset + 2);
- col_append_fstr(pinfo->cinfo, COL_INFO, "%s[%3u] ", /* "original-invokeID" replaced */
- val_to_split_str(bacapp_reason,
- 64,
- BACnetAbortReason,
- ASHRAE_Reserved_Fmt,
- Vendor_Proprietary_Fmt), bacapp_invoke_id);
-
- updateBacnetInfoValue(BACINFO_INVOKEID,
- ep_strdup_printf("Invoke ID: %d", bacapp_invoke_id));
-
- updateBacnetInfoValue(BACINFO_SERVICE,
- ep_strconcat(abortstr,
- val_to_split_str(bacapp_reason,
- 64,
- BACnetAbortReason,
- ASHRAE_Reserved_Fmt,
- Vendor_Proprietary_Fmt),
- NULL));
- break;
- /* UNKNOWN */
- default:
- /* nothing more to add */
- break;
- }
-
- save_fragmented = pinfo->fragmented;
-
- ti = proto_tree_add_item(tree, proto_bacapp, tvb, offset, -1, ENC_NA);
- bacapp_tree = proto_item_add_subtree(ti, ett_bacapp);
-
- if (!fragment)
- offset = do_the_dissection(tvb,pinfo,bacapp_tree);
- else
- fStartConfirmed(tvb, pinfo, bacapp_tree, offset, ack, &svc, &tt);
- /* not resetting the offset so the remaining can be done */
-
- if (fragment) { /* fragmented */
- fragment_data *frag_msg = NULL;
-
- new_tvb = NULL;
- pinfo->fragmented = TRUE;
-
- frag_msg = fragment_add_seq_check(tvb, data_offset, pinfo,
- bacapp_invoke_id, /* ID for fragments belonging together */
- msg_fragment_table, /* list of message fragments */
- msg_reassembled_table, /* list of reassembled messages */
- bacapp_seqno, /* fragment sequence number */
- tvb_reported_length_remaining(tvb, data_offset), /* fragment length - to the end */
- flag & BACAPP_MORE_SEGMENTS); /* Last fragment reached? */
- new_tvb = process_reassembled_data(tvb, data_offset, pinfo,
- "Reassembled BACapp", frag_msg, &msg_frag_items,
- NULL, tree);
-
- if (new_tvb) { /* Reassembled */
- col_append_str(pinfo->cinfo, COL_INFO,
- " (Message Reassembled)");
- } else { /* Not last packet of reassembled Short Message */
- col_append_fstr(pinfo->cinfo, COL_INFO,
- " (Message fragment %u)", bacapp_seqno);
- }
- if (new_tvb) { /* take it all */
- switch (bacapp_type)
- {
- case BACAPP_TYPE_CONFIRMED_SERVICE_REQUEST:
- fContinueConfirmedRequestPDU(new_tvb, pinfo, bacapp_tree, 0, svc);
- break;
- case BACAPP_TYPE_COMPLEX_ACK:
- fContinueComplexAckPDU(new_tvb, pinfo, bacapp_tree, 0, svc);
- break;
- default:
- /* do nothing */
- break;
- }
- /* } */
- }
- }
-
- pinfo->fragmented = save_fragmented;
-
- /* tapping */
- tap_queue_packet(bacapp_tap,pinfo,&bacinfo);
+ guint8 flag, bacapp_type;
+ guint save_fragmented = FALSE, data_offset = 0, /*bacapp_apdu_size,*/ fragment = FALSE;
+ tvbuff_t* new_tvb = NULL;
+ guint offset = 0;
+ guint8 bacapp_seqno = 0;
+ guint8 bacapp_service, bacapp_reason/*, bacapp_prop_win_size*/;
+ guint8 bacapp_invoke_id = 0;
+ proto_item *ti;
+ proto_tree *bacapp_tree = NULL;
+
+ gint svc = 0;
+ proto_item *tt = 0;
+ gint8 ack = 0;
+
+ /* Strings for BACnet Statistics */
+ const gchar errstr[] = "ERROR: ";
+ const gchar rejstr[] = "REJECTED: ";
+ const gchar abortstr[] = "ABORTED: ";
+ const gchar sackstr[] = " (SimpleAck)";
+ const gchar cackstr[] = " (ComplexAck)";
+ const gchar uconfsreqstr[] = " (Unconfirmed Service Request)";
+ const gchar confsreqstr[] = " (Confirmed Service Request)";
+
+ col_set_str(pinfo->cinfo, COL_PROTOCOL, "BACnet-APDU");
+ col_clear (pinfo->cinfo, COL_INFO);
+
+ flag = tvb_get_guint8(tvb, 0);
+ bacapp_type = (flag >> 4) & 0x0f;
+
+ /* show some descriptive text in the INFO column */
+ col_add_fstr(pinfo->cinfo, COL_INFO, "%-16s",
+ val_to_str(bacapp_type, BACnetTypeName, "# unknown APDU #"));
+
+ bacinfo.service_type = NULL;
+ bacinfo.invoke_id = NULL;
+ bacinfo.instance_ident = NULL;
+ bacinfo.object_ident = NULL;
+
+ switch (bacapp_type) {
+ case BACAPP_TYPE_CONFIRMED_SERVICE_REQUEST:
+ /* segmented messages have 2 additional bytes */
+ if (flag & BACAPP_SEGMENTED_REQUEST) {
+ fragment = TRUE;
+ ack = 0;
+ /* bacapp_apdu_size = fGetMaxAPDUSize(tvb_get_guint8(tvb, offset + 1)); */ /* has 16 values, reserved are 50 Bytes */
+ bacapp_invoke_id = tvb_get_guint8(tvb, offset + 2);
+ bacapp_seqno = tvb_get_guint8(tvb, offset + 3);
+ /* bacapp_prop_win_size = tvb_get_guint8(tvb, offset + 4); */
+ bacapp_service = tvb_get_guint8(tvb, offset + 5);
+ data_offset = 6;
+ } else {
+ bacapp_invoke_id = tvb_get_guint8(tvb, offset + 2);
+ bacapp_service = tvb_get_guint8(tvb, offset + 3);
+ }
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s[%3u] ",
+ val_to_str(bacapp_service,
+ BACnetConfirmedServiceChoice,
+ bacapp_unknown_service_str),bacapp_invoke_id);
+
+ updateBacnetInfoValue(BACINFO_INVOKEID,
+ ep_strdup_printf("Invoke ID: %d", bacapp_invoke_id));
+
+ updateBacnetInfoValue(BACINFO_SERVICE,
+ ep_strconcat(val_to_str(bacapp_service,
+ BACnetConfirmedServiceChoice,
+ bacapp_unknown_service_str),
+ confsreqstr, NULL));
+ break;
+ case BACAPP_TYPE_UNCONFIRMED_SERVICE_REQUEST:
+ bacapp_service = tvb_get_guint8(tvb, offset + 1);
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ",
+ val_to_str(bacapp_service,
+ BACnetUnconfirmedServiceChoice,
+ bacapp_unknown_service_str));
+
+ updateBacnetInfoValue(BACINFO_SERVICE,
+ ep_strconcat(val_to_str(bacapp_service,
+ BACnetUnconfirmedServiceChoice,
+ bacapp_unknown_service_str),
+ uconfsreqstr, NULL));
+ break;
+ case BACAPP_TYPE_SIMPLE_ACK:
+ bacapp_invoke_id = tvb_get_guint8(tvb, offset + 1);
+ bacapp_service = tvb_get_guint8(tvb, offset + 2);
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s[%3u] ", /* "original-invokeID" replaced */
+ val_to_str(bacapp_service,
+ BACnetConfirmedServiceChoice,
+ bacapp_unknown_service_str), bacapp_invoke_id);
+
+ updateBacnetInfoValue(BACINFO_INVOKEID,
+ ep_strdup_printf("Invoke ID: %d", bacapp_invoke_id));
+
+ updateBacnetInfoValue(BACINFO_SERVICE,
+ ep_strconcat(val_to_str(bacapp_service,
+ BACnetConfirmedServiceChoice,
+ bacapp_unknown_service_str),
+ sackstr, NULL));
+ break;
+ case BACAPP_TYPE_COMPLEX_ACK:
+ /* segmented messages have 2 additional bytes */
+ if (flag & BACAPP_SEGMENTED_REQUEST) {
+ fragment = TRUE;
+ ack = 1;
+ /* bacapp_apdu_size = fGetMaxAPDUSize(0); */ /* has minimum of 50 Bytes */
+ bacapp_invoke_id = tvb_get_guint8(tvb, offset + 1);
+ bacapp_seqno = tvb_get_guint8(tvb, offset + 2);
+ /* bacapp_prop_win_size = tvb_get_guint8(tvb, offset + 3); */
+ bacapp_service = tvb_get_guint8(tvb, offset + 4);
+ data_offset = 5;
+ } else {
+ bacapp_invoke_id = tvb_get_guint8(tvb, offset + 1);
+ bacapp_service = tvb_get_guint8(tvb, offset + 2);
+ }
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s[%3u] ", /* "original-invokeID" replaced */
+ val_to_str(bacapp_service,
+ BACnetConfirmedServiceChoice,
+ bacapp_unknown_service_str), bacapp_invoke_id);
+
+ updateBacnetInfoValue(BACINFO_INVOKEID,
+ ep_strdup_printf("Invoke ID: %d", bacapp_invoke_id));
+
+ updateBacnetInfoValue(BACINFO_SERVICE,
+ ep_strconcat(val_to_str(bacapp_service,
+ BACnetConfirmedServiceChoice,
+ bacapp_unknown_service_str),
+ cackstr, NULL));
+ break;
+ case BACAPP_TYPE_SEGMENT_ACK:
+ /* nothing more to add */
+ break;
+ case BACAPP_TYPE_ERROR:
+ bacapp_invoke_id = tvb_get_guint8(tvb, offset + 1);
+ bacapp_service = tvb_get_guint8(tvb, offset + 2);
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s[%3u] ", /* "original-invokeID" replaced */
+ val_to_str(bacapp_service,
+ BACnetConfirmedServiceChoice,
+ bacapp_unknown_service_str), bacapp_invoke_id);
+
+ updateBacnetInfoValue(BACINFO_INVOKEID,
+ ep_strdup_printf("Invoke ID: %d", bacapp_invoke_id));
+
+ updateBacnetInfoValue(BACINFO_SERVICE,
+ ep_strconcat(errstr,
+ val_to_str(bacapp_service,
+ BACnetConfirmedServiceChoice,
+ bacapp_unknown_service_str),
+ NULL));
+ break;
+ case BACAPP_TYPE_REJECT:
+ bacapp_invoke_id = tvb_get_guint8(tvb, offset + 1);
+ bacapp_reason = tvb_get_guint8(tvb, offset + 2);
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s[%3u] ", /* "original-invokeID" replaced */
+ val_to_split_str(bacapp_reason,
+ 64,
+ BACnetRejectReason,
+ ASHRAE_Reserved_Fmt,
+ Vendor_Proprietary_Fmt), bacapp_invoke_id);
+
+ updateBacnetInfoValue(BACINFO_INVOKEID,
+ ep_strdup_printf("Invoke ID: %d", bacapp_invoke_id));
+
+ updateBacnetInfoValue(BACINFO_SERVICE,
+ ep_strconcat(rejstr,
+ val_to_split_str(bacapp_reason, 64,
+ BACnetRejectReason,
+ ASHRAE_Reserved_Fmt,
+ Vendor_Proprietary_Fmt),
+ NULL));
+ break;
+ case BACAPP_TYPE_ABORT:
+ bacapp_invoke_id = tvb_get_guint8(tvb, offset + 1);
+ bacapp_reason = tvb_get_guint8(tvb, offset + 2);
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s[%3u] ", /* "original-invokeID" replaced */
+ val_to_split_str(bacapp_reason,
+ 64,
+ BACnetAbortReason,
+ ASHRAE_Reserved_Fmt,
+ Vendor_Proprietary_Fmt), bacapp_invoke_id);
+
+ updateBacnetInfoValue(BACINFO_INVOKEID,
+ ep_strdup_printf("Invoke ID: %d", bacapp_invoke_id));
+
+ updateBacnetInfoValue(BACINFO_SERVICE,
+ ep_strconcat(abortstr,
+ val_to_split_str(bacapp_reason,
+ 64,
+ BACnetAbortReason,
+ ASHRAE_Reserved_Fmt,
+ Vendor_Proprietary_Fmt),
+ NULL));
+ break;
+ /* UNKNOWN */
+ default:
+ /* nothing more to add */
+ break;
+ }
+
+ save_fragmented = pinfo->fragmented;
+
+ ti = proto_tree_add_item(tree, proto_bacapp, tvb, offset, -1, ENC_NA);
+ bacapp_tree = proto_item_add_subtree(ti, ett_bacapp);
+
+ if (!fragment)
+ offset = do_the_dissection(tvb,pinfo,bacapp_tree);
+ else
+ fStartConfirmed(tvb, pinfo, bacapp_tree, offset, ack, &svc, &tt);
+ /* not resetting the offset so the remaining can be done */
+
+ if (fragment) { /* fragmented */
+ fragment_data *frag_msg = NULL;
+
+ new_tvb = NULL;
+ pinfo->fragmented = TRUE;
+
+ frag_msg = fragment_add_seq_check(tvb, data_offset, pinfo,
+ bacapp_invoke_id, /* ID for fragments belonging together */
+ msg_fragment_table, /* list of message fragments */
+ msg_reassembled_table, /* list of reassembled messages */
+ bacapp_seqno, /* fragment sequence number */
+ tvb_reported_length_remaining(tvb, data_offset), /* fragment length - to the end */
+ flag & BACAPP_MORE_SEGMENTS); /* Last fragment reached? */
+ new_tvb = process_reassembled_data(tvb, data_offset, pinfo,
+ "Reassembled BACapp", frag_msg, &msg_frag_items,
+ NULL, tree);
+
+ if (new_tvb) { /* Reassembled */
+ col_append_str(pinfo->cinfo, COL_INFO,
+ " (Message Reassembled)");
+ } else { /* Not last packet of reassembled Short Message */
+ col_append_fstr(pinfo->cinfo, COL_INFO,
+ " (Message fragment %u)", bacapp_seqno);
+ }
+ if (new_tvb) { /* take it all */
+ switch (bacapp_type) {
+ case BACAPP_TYPE_CONFIRMED_SERVICE_REQUEST:
+ fContinueConfirmedRequestPDU(new_tvb, pinfo, bacapp_tree, 0, svc);
+ break;
+ case BACAPP_TYPE_COMPLEX_ACK:
+ fContinueComplexAckPDU(new_tvb, pinfo, bacapp_tree, 0, svc);
+ break;
+ default:
+ /* do nothing */
+ break;
+ }
+ }
+ }
+
+ pinfo->fragmented = save_fragmented;
+
+ /* tapping */
+ tap_queue_packet(bacapp_tap,pinfo,&bacinfo);
}
static void
bacapp_init_routine(void)
{
- fragment_table_init(&msg_fragment_table);
- reassembled_table_init(&msg_reassembled_table);
+ fragment_table_init(&msg_fragment_table);
+ reassembled_table_init(&msg_reassembled_table);
}
static guint32
fConvertXXXtoUTF8 (gchar *in, gsize *inbytesleft, gchar *out, gsize *outbytesleft, const gchar *fromcoding)
{
- guint32 i;
- GIConv icd;
+ guint32 i;
+ GIConv icd;
- if ((icd = g_iconv_open ("UTF-8", fromcoding)) != (GIConv) -1) {
- i = (guint32) g_iconv (icd, &in, inbytesleft, &out, outbytesleft);
- /* g_iconv incremented 'out'; now ensure it's NULL terminated */
- out[0] = '\0';
+ if ((icd = g_iconv_open ("UTF-8", fromcoding)) != (GIConv) -1) {
+ i = (guint32) g_iconv (icd, &in, inbytesleft, &out, outbytesleft);
+ /* g_iconv incremented 'out'; now ensure it's NULL terminated */
+ out[0] = '\0';
- g_iconv_close (icd);
- return i;
- }
+ g_iconv_close (icd);
+ return i;
+ }
- uni_to_string(in,*inbytesleft,out);
- out[*inbytesleft] = '\0';
- *outbytesleft -= *inbytesleft;
- *inbytesleft = 0;
+ uni_to_string(in,*inbytesleft,out);
+ out[*inbytesleft] = '\0';
+ *outbytesleft -= *inbytesleft;
+ *inbytesleft = 0;
- return 0;
+ return 0;
}
static void
uni_to_string(char * data, gsize str_length, char *dest_buf)
{
- gint i;
- guint16 c_char;
- gsize length_remaining = 0;
-
- length_remaining = str_length;
- dest_buf[0] = '\0';
- if(str_length == 0) {
- return;
- }
- for ( i = 0; i < (gint) str_length; i++ ) {
- c_char = data[i];
- if (c_char<0x20 || c_char>0x7e) {
- if (c_char != 0x00) {
- c_char = '.';
- dest_buf[i] = c_char & 0xff;
- } else {
- i--;
- str_length--;
- }
- } else {
- dest_buf[i] = c_char & 0xff;
- }
- length_remaining--;
-
- if(length_remaining==0) {
- dest_buf[i+1] = '\0';
- return;
- }
- }
- if (i < 0) {
- i = 0;
- }
- dest_buf[i] = '\0';
- return;
+ gint i;
+ guint16 c_char;
+ gsize length_remaining = 0;
+
+ length_remaining = str_length;
+ dest_buf[0] = '\0';
+ if(str_length == 0) {
+ return;
+ }
+ for ( i = 0; i < (gint) str_length; i++ ) {
+ c_char = data[i];
+ if (c_char<0x20 || c_char>0x7e) {
+ if (c_char != 0x00) {
+ c_char = '.';
+ dest_buf[i] = c_char & 0xff;
+ } else {
+ i--;
+ str_length--;
+ }
+ } else {
+ dest_buf[i] = c_char & 0xff;
+ }
+ length_remaining--;
+
+ if(length_remaining==0) {
+ dest_buf[i+1] = '\0';
+ return;
+ }
+ }
+ if (i < 0) {
+ i = 0;
+ }
+ dest_buf[i] = '\0';
+ return;
}
void
proto_register_bacapp(void)
{
- static hf_register_info hf[] = {
- { &hf_bacapp_type,
- { "APDU Type", "bacapp.type",
- FT_UINT8, BASE_DEC, VALS(BACnetTypeName), 0xf0, NULL, HFILL }
- },
- { &hf_bacapp_pduflags,
- { "PDU Flags", "bacapp.pduflags",
- FT_UINT8, BASE_HEX, NULL, 0x0f, NULL, HFILL }
- },
- { &hf_bacapp_SEG,
- { "Segmented Request", "bacapp.segmented_request",
- FT_BOOLEAN, 8, TFS(&segments_follow), 0x08, NULL, HFILL }
- },
- { &hf_bacapp_MOR,
- { "More Segments", "bacapp.more_segments",
- FT_BOOLEAN, 8, TFS(&more_follow), 0x04, "More Segments Follow", HFILL }
- },
- { &hf_bacapp_SA,
- { "SA", "bacapp.SA",
- FT_BOOLEAN, 8, TFS(&segmented_accept), 0x02, "Segmented Response accepted", HFILL }
- },
- { &hf_bacapp_max_adpu_size,
- { "Size of Maximum ADPU accepted", "bacapp.max_adpu_size",
- FT_UINT8, BASE_DEC, VALS(BACnetMaxAPDULengthAccepted), 0x0f, NULL, HFILL }
- },
- { &hf_bacapp_response_segments,
- { "Max Response Segments accepted", "bacapp.response_segments",
- FT_UINT8, BASE_DEC, VALS(BACnetMaxSegmentsAccepted), 0x70, NULL, HFILL }
- },
- { &hf_bacapp_objectType,
- { "Object Type", "bacapp.objectType",
- FT_UINT32, BASE_DEC, VALS(BACnetObjectType), 0xffc00000, NULL, HFILL }
- },
- { &hf_bacapp_instanceNumber,
- { "Instance Number", "bacapp.instance_number",
- FT_UINT32, BASE_DEC, NULL, 0x003fffff, NULL, HFILL }
- },
- { &hf_BACnetPropertyIdentifier,
- { "Property Identifier", "bacapp.property_identifier",
- FT_UINT32, BASE_DEC, VALS(BACnetPropertyIdentifier), 0, NULL, HFILL }
- },
- { &hf_BACnetVendorIdentifier,
- { "Vendor Identifier", "bacapp.vendor_identifier",
- FT_UINT16, BASE_DEC, VALS(BACnetVendorIdentifiers), 0, NULL, HFILL }
- },
- { &hf_BACnetRestartReason,
- { "Restart Reason", "bacapp.restart_reason",
- FT_UINT8, BASE_DEC, VALS(BACnetRestartReason), 0, NULL, HFILL }
- },
- { &hf_bacapp_invoke_id,
- { "Invoke ID", "bacapp.invoke_id",
- FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }
- },
- { &hf_bacapp_sequence_number,
- { "Sequence Number", "bacapp.sequence_number",
- FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }
- },
- { &hf_bacapp_window_size,
- { "Proposed Window Size", "bacapp.window_size",
- FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }
- },
- { &hf_bacapp_service,
- { "Service Choice", "bacapp.confirmed_service",
- FT_UINT8, BASE_DEC, VALS(BACnetConfirmedServiceChoice), 0x00, NULL, HFILL }
- },
- { &hf_bacapp_uservice,
- { "Unconfirmed Service Choice", "bacapp.unconfirmed_service",
- FT_UINT8, BASE_DEC, VALS(BACnetUnconfirmedServiceChoice), 0x00, NULL, HFILL }
- },
- { &hf_bacapp_NAK,
- { "NAK", "bacapp.NAK",
- FT_BOOLEAN, 8, NULL, 0x02, "negative ACK", HFILL }
- },
- { &hf_bacapp_SRV,
- { "SRV", "bacapp.SRV",
- FT_BOOLEAN, 8, NULL, 0x01, "Server", HFILL }
- },
- { &hf_Device_Instance_Range_Low_Limit,
- { "Device Instance Range Low Limit", "bacapp.who_is.low_limit",
- FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }
- },
- { &hf_Device_Instance_Range_High_Limit,
- { "Device Instance Range High Limit", "bacapp.who_is.high_limit",
- FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }
- },
- { &hf_BACnetRejectReason,
- { "Reject Reason", "bacapp.reject_reason",
- FT_UINT8, BASE_DEC, VALS(BACnetRejectReason), 0x00, NULL, HFILL }
- },
- { &hf_BACnetAbortReason,
- { "Abort Reason", "bacapp.abort_reason",
- FT_UINT8, BASE_DEC, VALS(BACnetAbortReason), 0x00, NULL, HFILL }
- },
- { &hf_BACnetApplicationTagNumber,
- { "Application Tag Number",
- "bacapp.application_tag_number",
- FT_UINT8, BASE_DEC, VALS(BACnetApplicationTagNumber), 0xF0,
- NULL, HFILL }
- },
- { &hf_BACnetContextTagNumber,
- { "Context Tag Number",
- "bacapp.context_tag_number",
- FT_UINT8, BASE_DEC, NULL, 0xF0,
- NULL, HFILL }
- },
- { &hf_BACnetExtendedTagNumber,
- { "Extended Tag Number",
- "bacapp.extended_tag_number",
- FT_UINT8, BASE_DEC, NULL, 0,
- NULL, HFILL }
- },
- { &hf_BACnetNamedTag,
- { "Named Tag",
- "bacapp.named_tag",
- FT_UINT8, BASE_DEC, VALS(BACnetTagNames), 0x07,
- NULL, HFILL }
- },
- { &hf_BACnetCharacterSet,
- { "String Character Set",
- "bacapp.string_character_set",
- FT_UINT8, BASE_DEC, VALS(BACnetCharacterSet),0,
- NULL, HFILL }
- },
- { &hf_BACnetTagClass,
- { "Tag Class", "bacapp.tag_class",
- FT_BOOLEAN, 8, TFS(&BACnetTagClass), 0x08, NULL, HFILL }
- },
- { &hf_bacapp_tag_lvt,
- { "Length Value Type",
- "bacapp.LVT",
- FT_UINT8, BASE_DEC, NULL, 0,
- NULL, HFILL }
- },
- { &hf_bacapp_tag_ProcessId,
- { "ProcessIdentifier", "bacapp.processId",
- FT_UINT32, BASE_DEC, NULL, 0, "Process Identifier", HFILL }
- },
- { &hf_bacapp_tag_IPV4,
- { "IPV4", "bacapp.IPV4",
- FT_IPv4, BASE_NONE, NULL, 0, "IP-Address", HFILL }
- },
- { &hf_bacapp_tag_IPV6,
- { "IPV6", "bacapp.IPV6",
- FT_IPv6, BASE_NONE, NULL, 0, "IP-Address", HFILL }
- },
- { &hf_bacapp_tag_PORT,
- { "Port", "bacapp.Port",
- FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }
- },
- {&hf_msg_fragments,
- {"Message fragments", "bacapp.fragments",
- FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL } },
- {&hf_msg_fragment,
- {"Message fragment", "bacapp.fragment",
- FT_FRAMENUM, BASE_NONE, NULL, 0x00, NULL, HFILL } },
- {&hf_msg_fragment_overlap,
- {"Message fragment overlap", "bacapp.fragment.overlap",
- FT_BOOLEAN, BASE_NONE, NULL, 0x00, NULL, HFILL } },
- {&hf_msg_fragment_overlap_conflicts,
- {"Message fragment overlapping with conflicting data",
- "bacapp.fragment.overlap.conflicts",
- FT_BOOLEAN, BASE_NONE, NULL, 0x00, NULL, HFILL } },
- {&hf_msg_fragment_multiple_tails,
- {"Message has multiple tail fragments",
- "bacapp.fragment.multiple_tails",
- FT_BOOLEAN, BASE_NONE, NULL, 0x00, NULL, HFILL } },
- {&hf_msg_fragment_too_long_fragment,
- {"Message fragment too long", "bacapp.fragment.too_long_fragment",
- FT_BOOLEAN, BASE_NONE, NULL, 0x00, NULL, HFILL } },
- {&hf_msg_fragment_error,
- {"Message defragmentation error", "bacapp.fragment.error",
- FT_FRAMENUM, BASE_NONE, NULL, 0x00, NULL, HFILL } },
- {&hf_msg_fragment_count,
- {"Message fragment count", "bacapp.fragment.count",
- FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } },
- {&hf_msg_reassembled_in,
- {"Reassembled in", "bacapp.reassembled.in",
- FT_FRAMENUM, BASE_NONE, NULL, 0x00, NULL, HFILL } },
- {&hf_msg_reassembled_length,
- {"Reassembled BACapp length", "bacapp.reassembled.length",
- FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } }
- };
- static gint *ett[] = {
- &ett_bacapp,
- &ett_bacapp_control,
- &ett_bacapp_tag,
- &ett_bacapp_list,
- &ett_bacapp_value,
- &ett_msg_fragment,
- &ett_msg_fragments
-
- };
-
- proto_bacapp = proto_register_protocol("Building Automation and Control Network APDU",
- "BACapp", "bacapp");
-
- proto_register_field_array(proto_bacapp, hf, array_length(hf));
- proto_register_subtree_array(ett, array_length(ett));
- register_dissector("bacapp", dissect_bacapp, proto_bacapp);
- register_init_routine (&bacapp_init_routine);
-
- bacapp_dissector_table = register_dissector_table("bacapp.vendor_identifier",
- "BACapp Vendor Identifier",
- FT_UINT8, BASE_HEX);
-
- /* Register BACnet Statistic trees */
- register_bacapp_stat_trees();
- bacapp_tap = register_tap("bacapp"); /* BACnet statistics tap */
+ static hf_register_info hf[] = {
+ { &hf_bacapp_type,
+ { "APDU Type", "bacapp.type",
+ FT_UINT8, BASE_DEC, VALS(BACnetTypeName), 0xf0, NULL, HFILL }
+ },
+ { &hf_bacapp_pduflags,
+ { "PDU Flags", "bacapp.pduflags",
+ FT_UINT8, BASE_HEX, NULL, 0x0f, NULL, HFILL }
+ },
+ { &hf_bacapp_SEG,
+ { "Segmented Request", "bacapp.segmented_request",
+ FT_BOOLEAN, 8, TFS(&segments_follow), 0x08, NULL, HFILL }
+ },
+ { &hf_bacapp_MOR,
+ { "More Segments", "bacapp.more_segments",
+ FT_BOOLEAN, 8, TFS(&more_follow), 0x04, "More Segments Follow", HFILL }
+ },
+ { &hf_bacapp_SA,
+ { "SA", "bacapp.SA",
+ FT_BOOLEAN, 8, TFS(&segmented_accept), 0x02, "Segmented Response accepted", HFILL }
+ },
+ { &hf_bacapp_max_adpu_size,
+ { "Size of Maximum ADPU accepted", "bacapp.max_adpu_size",
+ FT_UINT8, BASE_DEC, VALS(BACnetMaxAPDULengthAccepted), 0x0f, NULL, HFILL }
+ },
+ { &hf_bacapp_response_segments,
+ { "Max Response Segments accepted", "bacapp.response_segments",
+ FT_UINT8, BASE_DEC, VALS(BACnetMaxSegmentsAccepted), 0x70, NULL, HFILL }
+ },
+ { &hf_bacapp_objectType,
+ { "Object Type", "bacapp.objectType",
+ FT_UINT32, BASE_DEC, VALS(BACnetObjectType), 0xffc00000, NULL, HFILL }
+ },
+ { &hf_bacapp_instanceNumber,
+ { "Instance Number", "bacapp.instance_number",
+ FT_UINT32, BASE_DEC, NULL, 0x003fffff, NULL, HFILL }
+ },
+ { &hf_BACnetPropertyIdentifier,
+ { "Property Identifier", "bacapp.property_identifier",
+ FT_UINT32, BASE_DEC, VALS(BACnetPropertyIdentifier), 0, NULL, HFILL }
+ },
+ { &hf_BACnetVendorIdentifier,
+ { "Vendor Identifier", "bacapp.vendor_identifier",
+ FT_UINT16, BASE_DEC, VALS(BACnetVendorIdentifiers), 0, NULL, HFILL }
+ },
+ { &hf_BACnetRestartReason,
+ { "Restart Reason", "bacapp.restart_reason",
+ FT_UINT8, BASE_DEC, VALS(BACnetRestartReason), 0, NULL, HFILL }
+ },
+ { &hf_bacapp_invoke_id,
+ { "Invoke ID", "bacapp.invoke_id",
+ FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }
+ },
+ { &hf_bacapp_sequence_number,
+ { "Sequence Number", "bacapp.sequence_number",
+ FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }
+ },
+ { &hf_bacapp_window_size,
+ { "Proposed Window Size", "bacapp.window_size",
+ FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }
+ },
+ { &hf_bacapp_service,
+ { "Service Choice", "bacapp.confirmed_service",
+ FT_UINT8, BASE_DEC, VALS(BACnetConfirmedServiceChoice), 0x00, NULL, HFILL }
+ },
+ { &hf_bacapp_uservice,
+ { "Unconfirmed Service Choice", "bacapp.unconfirmed_service",
+ FT_UINT8, BASE_DEC, VALS(BACnetUnconfirmedServiceChoice), 0x00, NULL, HFILL }
+ },
+ { &hf_bacapp_NAK,
+ { "NAK", "bacapp.NAK",
+ FT_BOOLEAN, 8, NULL, 0x02, "negative ACK", HFILL }
+ },
+ { &hf_bacapp_SRV,
+ { "SRV", "bacapp.SRV",
+ FT_BOOLEAN, 8, NULL, 0x01, "Server", HFILL }
+ },
+ { &hf_Device_Instance_Range_Low_Limit,
+ { "Device Instance Range Low Limit", "bacapp.who_is.low_limit",
+ FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }
+ },
+ { &hf_Device_Instance_Range_High_Limit,
+ { "Device Instance Range High Limit", "bacapp.who_is.high_limit",
+ FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }
+ },
+ { &hf_BACnetRejectReason,
+ { "Reject Reason", "bacapp.reject_reason",
+ FT_UINT8, BASE_DEC, VALS(BACnetRejectReason), 0x00, NULL, HFILL }
+ },
+ { &hf_BACnetAbortReason,
+ { "Abort Reason", "bacapp.abort_reason",
+ FT_UINT8, BASE_DEC, VALS(BACnetAbortReason), 0x00, NULL, HFILL }
+ },
+ { &hf_BACnetApplicationTagNumber,
+ { "Application Tag Number",
+ "bacapp.application_tag_number",
+ FT_UINT8, BASE_DEC, VALS(BACnetApplicationTagNumber), 0xF0,
+ NULL, HFILL }
+ },
+ { &hf_BACnetContextTagNumber,
+ { "Context Tag Number",
+ "bacapp.context_tag_number",
+ FT_UINT8, BASE_DEC, NULL, 0xF0,
+ NULL, HFILL }
+ },
+ { &hf_BACnetExtendedTagNumber,
+ { "Extended Tag Number",
+ "bacapp.extended_tag_number",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_BACnetNamedTag,
+ { "Named Tag",
+ "bacapp.named_tag",
+ FT_UINT8, BASE_DEC, VALS(BACnetTagNames), 0x07,
+ NULL, HFILL }
+ },
+ { &hf_BACnetCharacterSet,
+ { "String Character Set",
+ "bacapp.string_character_set",
+ FT_UINT8, BASE_DEC, VALS(BACnetCharacterSet),0,
+ NULL, HFILL }
+ },
+ { &hf_BACnetTagClass,
+ { "Tag Class", "bacapp.tag_class",
+ FT_BOOLEAN, 8, TFS(&BACnetTagClass), 0x08, NULL, HFILL }
+ },
+ { &hf_bacapp_tag_lvt,
+ { "Length Value Type",
+ "bacapp.LVT",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_bacapp_tag_ProcessId,
+ { "ProcessIdentifier", "bacapp.processId",
+ FT_UINT32, BASE_DEC, NULL, 0, "Process Identifier", HFILL }
+ },
+ { &hf_bacapp_tag_IPV4,
+ { "IPV4", "bacapp.IPV4",
+ FT_IPv4, BASE_NONE, NULL, 0, "IP-Address", HFILL }
+ },
+ { &hf_bacapp_tag_IPV6,
+ { "IPV6", "bacapp.IPV6",
+ FT_IPv6, BASE_NONE, NULL, 0, "IP-Address", HFILL }
+ },
+ { &hf_bacapp_tag_PORT,
+ { "Port", "bacapp.Port",
+ FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }
+ },
+ {&hf_msg_fragments,
+ {"Message fragments", "bacapp.fragments",
+ FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL } },
+ {&hf_msg_fragment,
+ {"Message fragment", "bacapp.fragment",
+ FT_FRAMENUM, BASE_NONE, NULL, 0x00, NULL, HFILL } },
+ {&hf_msg_fragment_overlap,
+ {"Message fragment overlap", "bacapp.fragment.overlap",
+ FT_BOOLEAN, BASE_NONE, NULL, 0x00, NULL, HFILL } },
+ {&hf_msg_fragment_overlap_conflicts,
+ {"Message fragment overlapping with conflicting data",
+ "bacapp.fragment.overlap.conflicts",
+ FT_BOOLEAN, BASE_NONE, NULL, 0x00, NULL, HFILL } },
+ {&hf_msg_fragment_multiple_tails,
+ {"Message has multiple tail fragments",
+ "bacapp.fragment.multiple_tails",
+ FT_BOOLEAN, BASE_NONE, NULL, 0x00, NULL, HFILL } },
+ {&hf_msg_fragment_too_long_fragment,
+ {"Message fragment too long", "bacapp.fragment.too_long_fragment",
+ FT_BOOLEAN, BASE_NONE, NULL, 0x00, NULL, HFILL } },
+ {&hf_msg_fragment_error,
+ {"Message defragmentation error", "bacapp.fragment.error",
+ FT_FRAMENUM, BASE_NONE, NULL, 0x00, NULL, HFILL } },
+ {&hf_msg_fragment_count,
+ {"Message fragment count", "bacapp.fragment.count",
+ FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } },
+ {&hf_msg_reassembled_in,
+ {"Reassembled in", "bacapp.reassembled.in",
+ FT_FRAMENUM, BASE_NONE, NULL, 0x00, NULL, HFILL } },
+ {&hf_msg_reassembled_length,
+ {"Reassembled BACapp length", "bacapp.reassembled.length",
+ FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } }
+ };
+ static gint *ett[] = {
+ &ett_bacapp,
+ &ett_bacapp_control,
+ &ett_bacapp_tag,
+ &ett_bacapp_list,
+ &ett_bacapp_value,
+ &ett_msg_fragment,
+ &ett_msg_fragments
+
+ };
+
+ proto_bacapp = proto_register_protocol("Building Automation and Control Network APDU",
+ "BACapp", "bacapp");
+
+ proto_register_field_array(proto_bacapp, hf, array_length(hf));
+ proto_register_subtree_array(ett, array_length(ett));
+ register_dissector("bacapp", dissect_bacapp, proto_bacapp);
+ register_init_routine (&bacapp_init_routine);
+
+ bacapp_dissector_table = register_dissector_table("bacapp.vendor_identifier",
+ "BACapp Vendor Identifier",
+ FT_UINT8, BASE_HEX);
+
+ /* Register BACnet Statistic trees */
+ register_bacapp_stat_trees();
+ bacapp_tap = register_tap("bacapp"); /* BACnet statistics tap */
}
void
proto_reg_handoff_bacapp(void)
{
- data_handle = find_dissector("data");
+ data_handle = find_dissector("data");
}