Ethereal-dev: [Ethereal-dev] Patches for packet-bacapp.h/.c
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: David Richards <d_m_richards@xxxxxxxxxxx>
Date: Thu, 29 Sep 2005 00:55:44 -0500
This patch (two files) is to correct: 1) Fixes context-tagged BACnet errors.2) Fixes indeterminate tag data. If the tag length/value/type variable was 6 or 7 you could not tell whether it was an open/close tag or had length 6/7. 3) Don't make assumptions about property types for proprietary BACnet object types.
Could someone please check this in. Thanks, Dave Richards drichards@xxxxxxxxxxxx
--- /cygdrive/f/Temp/packet-bacapp-HEAD.h 2005-09-28 21:57:14.953125000 -0500 +++ packet-bacapp.h 2005-09-28 21:55:52.000000000 -0500 @@ -1217,6 +1217,16 @@ fBACnetError(tvbuff_t *tvb, proto_tree *tree, guint offset, guint service); /** + * Dissect a BACnetError in a context tag + * + * @param tvb + * @param tree + * @param offset + * @return modified offset + */ +static guint fContextTaggedError(tvbuff_t *tvb, proto_tree *tree, guint offset); + +/** * ChangeList-Error ::= SEQUENCE { * errorType [0] Error, * firstFailedElementNumber [1] Unsigned
--- /cygdrive/f/Temp/packet-bacapp-HEAD.c 2005-09-28 22:49:47.703125000 -0500 +++ packet-bacapp.c 2005-09-28 23:34:26.000000000 -0500 @@ -4,7 +4,7 @@ * Enhanced by Steve Karg, 2005, <skarg@xxxxxxxxxxxxxxxxxxxxx>, Atlanta * Enhanced by Herbert Lischka, 2005, <lischka@xxxxxxxxxxxxxxxx>, Berlin * - * $Id: packet-bacapp.c 15666 2005-09-02 05:49:25Z etxrab $ + * $Id: packet-bacapp.c 15270 2005-08-10 13:41:13Z sahlberg $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@xxxxxxxxxxxx> @@ -1248,6 +1248,7 @@ static dissector_handle_t data_handle; static gint32 propertyIdentifier = -1; +static guint32 object_type = 4096; static guint8 bacapp_flags = 0; static guint8 bacapp_seq = 0; @@ -1265,39 +1266,29 @@ /* from clause 20.2.1.3.2 Constructed Data */ /* returns true if the extended value is used */ -static gboolean tag_is_extended_value(guint8 octet) +static gboolean tag_is_extended_value(guint8 tag) { - return ((octet & 0x07) == 5); + return (tag & 0x07) == 5; } -static gboolean lvt_is_opening_tag(guint lvt) +static gboolean tag_is_opening(guint8 tag) { - return (lvt == 6); + return (tag & 0x07) == 6; } -static gboolean tag_is_opening(guint tag) +static gboolean tag_is_closing(guint8 tag) { - return ((tag & 0x07) == 6); -} - -static gboolean lvt_is_closing_tag(guint lvt) -{ - return (lvt == 7); -} - -static gboolean tag_is_closing(guint tag) -{ - return ((tag & 0x07) == 7); + return (tag & 0x07) == 7; } /* from clause 20.2.1.3.2 Constructed Data returns true if the tag number is context specific */ -static gboolean tag_is_context_specific(guint tag) +static gboolean tag_is_context_specific(guint8 tag) { - return ((tag & 0x08) == 8); + return (tag & 0x08) != 0; } -static gboolean tag_is_extended_tag_number(guint tag) +static gboolean tag_is_extended_tag_number(guint8 tag) { return ((tag & 0xF0) == 0xF0); } @@ -1375,7 +1366,7 @@ static guint fTagHeaderTree (tvbuff_t *tvb, proto_tree *tree, guint offset, - guint8 *tag_no, guint8* class_tag, guint32 *lvt) + guint8 *tag_no, guint8* tag_info, guint32 *lvt) { guint8 tag; guint8 value; @@ -1387,8 +1378,12 @@ lvt_offset = offset; tag = tvb_get_guint8(tvb, offset); - *class_tag = tag & 0x08; /* 0 = Application Tag, 1 = Context Specific Tag */ + *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++); @@ -1466,23 +1461,23 @@ } static guint -fTagHeader (tvbuff_t *tvb, guint offset, guint8 *tag_no, guint8* class_tag, +fTagHeader (tvbuff_t *tvb, guint offset, guint8 *tag_no, guint8* tag_info, guint32 *lvt) { - return fTagHeaderTree (tvb, NULL, offset, tag_no, class_tag, 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, class_tag; + 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, &class_tag, &lvt); + fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); return offset + 1; } @@ -1490,15 +1485,15 @@ static guint fBooleanTag (tvbuff_t *tvb, proto_tree *tree, guint offset, const gchar *label) { - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt = 0; guint tag_len; proto_item *ti; proto_tree *subtree; guint bool_len = 1; - tag_len = fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); - if (class_tag && lvt == 1) + tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt); + if (tag_info && lvt == 1) { lvt = tvb_get_guint8(tvb, offset+1); ++bool_len; @@ -1507,7 +1502,7 @@ 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, &class_tag, &lvt); + fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); return offset + bool_len; } @@ -1516,13 +1511,13 @@ fUnsignedTag (tvbuff_t *tvb, proto_tree *tree, guint offset, const gchar *label) { guint64 val = 0; - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; guint tag_len; proto_item *ti; proto_tree *subtree; - tag_len = fTagHeader (tvb, offset, &tag_no, &class_tag, &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, @@ -1531,7 +1526,7 @@ 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, &class_tag, &lvt); + fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); return offset+tag_len+lvt; } @@ -1542,13 +1537,13 @@ const value_string *vs, guint32 split_val) { guint32 val = 0; - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; guint tag_len; proto_item *ti; proto_tree *subtree; - tag_len = fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); + 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) @@ -1563,7 +1558,7 @@ "%s - %u octets (enumeration)", label, lvt); } subtree = proto_item_add_subtree(ti, ett_bacapp_tag); - fTagHeaderTree (tvb, subtree, offset, &tag_no, &class_tag, &lvt); + fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); return offset+tag_len+lvt; } @@ -1579,13 +1574,13 @@ fSignedTag (tvbuff_t *tvb, proto_tree *tree, guint offset, const gchar *label) { guint64 val = 0; - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; guint tag_len; proto_item *ti; proto_tree *subtree; - tag_len = fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); + tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt); if (fUnsigned64 (tvb, offset + tag_len, lvt, &val)) ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len, "%s(Signed) %" PRId64, label, (gint64) val); @@ -1593,7 +1588,7 @@ 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, &class_tag, &lvt); + fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt); return offset+tag_len+lvt; } @@ -1601,19 +1596,19 @@ static guint fRealTag (tvbuff_t *tvb, proto_tree *tree, guint offset, const gchar *label) { - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; guint tag_len; gfloat f_val = 0.0; proto_item *ti; proto_tree *subtree; - tag_len = fTagHeader(tvb, offset, &tag_no, &class_tag, &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, &class_tag, &lvt); + fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt); return offset+tag_len+4; } @@ -1621,19 +1616,19 @@ static guint fDoubleTag (tvbuff_t *tvb, proto_tree *tree, guint offset, const gchar *label) { - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; guint tag_len; gdouble d_val = 0.0; proto_item *ti; proto_tree *subtree; - tag_len = fTagHeader(tvb, offset, &tag_no, &class_tag, &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%lf (Double)", label, d_val); subtree = proto_item_add_subtree(ti, ett_bacapp_tag); - fTagHeaderTree(tvb, subtree, offset, &tag_no, &class_tag, &lvt); + fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt); return offset+tag_len+8; } @@ -1642,12 +1637,12 @@ fProcessId (tvbuff_t *tvb, proto_tree *tree, guint offset) { guint32 val = 0, lvt; - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; proto_item *ti; proto_tree *subtree; guint tag_len; - tag_len = fTagHeader (tvb, offset, &tag_no, &class_tag, &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); @@ -1655,7 +1650,7 @@ 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, &class_tag, &lvt); + fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt); return offset+tag_len+lvt; } @@ -1664,12 +1659,12 @@ fTimeSpan (tvbuff_t *tvb, proto_tree *tree, guint offset, const gchar *label) { guint32 val = 0, lvt; - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; proto_item *ti; proto_tree *subtree; guint tag_len; - tag_len = fTagHeader (tvb, offset, &tag_no, &class_tag, &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", @@ -1680,7 +1675,7 @@ 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, &class_tag, &lvt); + fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt); return offset+tag_len+lvt; } @@ -1689,13 +1684,13 @@ fWeekNDay (tvbuff_t *tvb, proto_tree *tree, guint offset) { guint32 month, weekOfMonth, dayOfWeek; - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; guint tag_len; proto_item *ti; proto_tree *subtree; - tag_len = fTagHeader (tvb, offset, &tag_no, &class_tag, &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); @@ -1704,7 +1699,7 @@ val_to_str(weekOfMonth, weekofmonth, "week of month (%d) not found"), val_to_str(dayOfWeek, days, "day of week (%d) not found")); subtree = proto_item_add_subtree(ti, ett_bacapp_tag); - fTagHeaderTree(tvb, subtree, offset, &tag_no, &class_tag, &lvt); + fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt); return offset+tag_len+lvt; } @@ -1713,13 +1708,13 @@ fDate (tvbuff_t *tvb, proto_tree *tree, guint offset, const gchar *label) { guint32 year, month, day, weekday; - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; guint tag_len; proto_item *ti; proto_tree *subtree; - tag_len = fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); + tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt); year = tvb_get_guint8(tvb, offset+tag_len) + 1900; month = tvb_get_guint8(tvb, offset+tag_len+1); day = tvb_get_guint8(tvb, offset+tag_len+2); @@ -1737,7 +1732,7 @@ days, "(%d) not found")); subtree = proto_item_add_subtree(ti, ett_bacapp_tag); - fTagHeaderTree (tvb, subtree, offset, &tag_no, &class_tag, &lvt); + fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); return offset+tag_len+lvt; } @@ -1746,12 +1741,12 @@ fTime (tvbuff_t *tvb, proto_tree *tree, guint offset, const gchar *label) { guint32 year, month, day, weekday, lvt; - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint tag_len; proto_item *ti; proto_tree *subtree; - tag_len = fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); + 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); @@ -1768,7 +1763,7 @@ year > 12 ? "P.M." : "A.M.", year, month, day, weekday); subtree = proto_item_add_subtree(ti, ett_bacapp_tag); - fTagHeaderTree (tvb, subtree, offset, &tag_no, &class_tag, &lvt); + fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); return offset+tag_len+lvt; } @@ -1791,13 +1786,13 @@ fTimeValue (tvbuff_t *tvb, proto_tree *tree, guint offset) { guint lastoffset = 0; - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; while ((tvb_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */ lastoffset = offset; - fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); - if (lvt_is_closing_tag(lvt) && class_tag) { /* closing Tag, but not for me */ + 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: "); @@ -1835,7 +1830,7 @@ static guint fTimeStamp (tvbuff_t *tvb, proto_tree *tree, guint offset) { - guint8 tag_no = 0, class_tag = 0; + guint8 tag_no = 0, tag_info = 0; guint32 lvt = 0; if (tvb_length_remaining(tvb, offset) > 0) { /* don't loop, it's a CHOICE */ @@ -1847,9 +1842,9 @@ offset = fUnsignedTag (tvb, tree, offset, "sequence Number: "); break; case 2: /* dateTime */ - offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt); offset = fDateTime (tvb, tree, offset, "timestamp: "); - offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt); break; default: return offset; @@ -1911,23 +1906,24 @@ fOctetString (tvbuff_t *tvb, proto_tree *tree, guint offset, const gchar *label, guint32 lvt) { gchar *tmp; - guint start = offset; - guint8 tag_no, class_tag; - proto_tree* subtree = tree; - proto_item* ti = 0; + 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, &class_tag, &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); + { + 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); + subtree = proto_item_add_subtree(ti, ett_bacapp_tag); - fTagHeaderTree(tvb, subtree, start, &tag_no, &class_tag, &lvt); + fTagHeaderTree(tvb, subtree, start, &tag_no, &tag_info, &lvt); return offset; } @@ -1935,12 +1931,12 @@ static guint fAddress (tvbuff_t *tvb, proto_tree *tree, guint offset) { - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; guint offs; offset = fUnsignedTag (tvb, tree, offset, "network-number"); - offs = fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); + 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; @@ -1959,18 +1955,19 @@ static guint fObjectIdentifier (tvbuff_t *tvb, proto_tree *tree, guint offset) { - guint8 tag_no, class_tag; + 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, &class_tag, &lvt); + 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_id_type(object_id), + val_to_split_str(object_type, 128, BACnetObjectType, ASHRAE_Reserved_Fmt, @@ -1978,7 +1975,7 @@ 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, &class_tag, &lvt); + fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); offset += tag_length; proto_tree_add_item(subtree, hf_bacapp_objectType, tvb, offset, 4, FALSE); proto_tree_add_item(subtree, hf_bacapp_instanceNumber, tvb, offset, 4, FALSE); @@ -2044,17 +2041,17 @@ fActionCommand (tvbuff_t *tvb, proto_tree *tree, guint offset) { guint lastoffset = 0; - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; proto_tree *subtree = tree; proto_item *tt; while ((tvb_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */ lastoffset = offset; - fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); - if (lvt_is_closing_tag(lvt) && class_tag) { + fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt); + if (tag_is_closing(tag_info)) { offset += fTagHeaderTree (tvb, subtree, offset, - &tag_no, &class_tag, &lvt); + &tag_no, &tag_info, &lvt); subtree = tree; continue; } @@ -2073,10 +2070,10 @@ offset = fUnsignedTag (tvb,subtree,offset,"Property Array Index: "); break; case 4: /* propertyValue */ - if (lvt_is_opening_tag(lvt) && class_tag) { + if (tag_is_opening(tag_info)) { tt = proto_tree_add_text(subtree, tvb, offset, 1, "propertyValue"); subtree = proto_item_add_subtree(tt, ett_bacapp_value); - offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); offset = fAbstractSyntaxNType (tvb, subtree, offset); break; } @@ -2112,14 +2109,14 @@ static guint fPropertyIdentifier (tvbuff_t *tvb, proto_tree *tree, guint offset) { - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; guint tag_len; proto_item *ti; proto_tree *subtree; propertyIdentifier = 0; /* global Variable */ - tag_len = fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); + tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt); if (fUnsigned32 (tvb, offset+tag_len, lvt, &propertyIdentifier)) ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len, "property Identifier: %s", @@ -2131,7 +2128,7 @@ ti = proto_tree_add_text(tree, tvb, offset, lvt+tag_len, "Property Identifier - %u octets", lvt); subtree = proto_item_add_subtree(ti, ett_bacapp_tag); - fTagHeaderTree (tvb, subtree, offset, &tag_no, &class_tag, &lvt); + fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); return offset+tag_len+lvt; } @@ -2139,7 +2136,7 @@ static guint fCharacterString (tvbuff_t *tvb, proto_tree *tree, guint offset, const gchar *label) { - guint8 tag_no, class_tag, character_set; + guint8 tag_no, tag_info, character_set; guint32 lvt, l; size_t inbytesleft, outbytesleft = 512; guint offs, extra = 1; @@ -2151,7 +2148,7 @@ if (tvb_length_remaining(tvb, offset) > 0) { - offs = fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); + offs = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt); character_set = tvb_get_guint8(tvb, offset+offs); /* Account for code page if DBCS */ @@ -2212,7 +2209,7 @@ subtree = proto_item_add_subtree(ti, ett_bacapp_tag); - fTagHeaderTree (tvb, subtree, start, &tag_no, &class_tag, &lvt); + fTagHeaderTree (tvb, subtree, start, &tag_no, &tag_info, &lvt); proto_tree_add_item(subtree, hf_BACnetCharacterSet, tvb, start+offs, 1, FALSE); if (character_set == 1) { @@ -2226,13 +2223,13 @@ fBitStringTagVS (tvbuff_t *tvb, proto_tree *tree, guint offset, const gchar *label, const value_string *src) { - guint8 tag_no, class_tag, tmp; + guint8 tag_no, tag_info, tmp; gint j, unused, skip; guint offs; guint32 lvt, i, numberOfBytes; guint8 bf_arr[256]; - offs = fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); + 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 */ @@ -2288,13 +2285,13 @@ fApplicationTypesEnumeratedSplit (tvbuff_t *tvb, proto_tree *tree, guint offset, const gchar *label, const value_string *src, guint32 split_val) { - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; guint tag_len; if (tvb_length_remaining(tvb, offset) > 0) { - tag_len = fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); + tag_len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt); switch (tag_no) { case 0: /** NULL 20.2.2 */ @@ -2366,7 +2363,7 @@ static guint fContextTaggedValue(tvbuff_t *tvb, proto_tree *tree, guint offset, const gchar *label) { - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; guint tag_len; proto_item *ti; @@ -2374,7 +2371,7 @@ gint tvb_len; (void)label; - tag_len = fTagHeader(tvb, offset, &tag_no, &class_tag, &lvt); + tag_len = fTagHeader(tvb, offset, &tag_no, &tag_info, &lvt); /* cap the the suggested length in case of bad data */ tvb_len = tvb_length_remaining(tvb, offset+tag_len); if ((tvb_len >= 0) && ((guint32)tvb_len < lvt)) @@ -2385,7 +2382,7 @@ "Context Value (as %u DATA octets)", lvt); subtree = proto_item_add_subtree(ti, ett_bacapp_tag); - fTagHeaderTree(tvb, subtree, offset, &tag_no, &class_tag, &lvt); + fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt); return offset + tag_len + lvt; } @@ -2393,20 +2390,27 @@ static guint fAbstractSyntaxNType (tvbuff_t *tvb, proto_tree *tree, guint offset) { - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; guint lastoffset = 0, depth = 0; char ar[256]; - g_snprintf (ar, sizeof(ar), "%s: ", - val_to_split_str(propertyIdentifier, 512, - BACnetPropertyIdentifier, - ASHRAE_Reserved_Fmt, - Vendor_Proprietary_Fmt)); + 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_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */ lastoffset = offset; - fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); - if (lvt_is_closing_tag(lvt) && class_tag) { /* closing tag, but not for me */ + 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; } @@ -2418,9 +2422,6 @@ case 30: /* BACnetAddressBinding */ offset = fAddressBinding (tvb,tree,offset); break; - case 38: /* exception-schedule */ - offset = fSpecialEvent (tvb,tree,offset); - break; case 79: /* object-type */ case 96: /* protocol-object-types-supported */ offset = fApplicationTypesEnumeratedSplit (tvb, tree, offset, ar, @@ -2449,21 +2450,30 @@ case 87: /* priority-array */ offset = fPriorityArray (tvb, tree, offset); break; + case 38: /* exception-schedule */ + if (object_type < 128) + { + offset = fSpecialEvent (tvb,tree,offset); + break; + } case 123: /* weekly-schedule */ - offset = fWeeklySchedule (tvb,tree,offset); - break; + if (object_type < 128) + { + offset = fWeeklySchedule (tvb,tree,offset); + break; + } default: - if (class_tag) + if (tag_info) { - if (lvt_is_opening_tag(lvt)) + if (tag_is_opening(tag_info)) { ++depth; - offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &tag_info, &lvt); } - else if (lvt_is_closing_tag(lvt)) + else if (tag_is_closing(tag_info)) { --depth; - offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree(tvb, tree, offset, &tag_no, &tag_info, &lvt); } else { @@ -2487,20 +2497,20 @@ guint lastoffset = offset; proto_item *tt; proto_tree *subtree; - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; offset = fPropertyReference(tvb, tree, offset, tagoffset, 0); if (offset > lastoffset) { - fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); + fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt); if (tag_no == tagoffset+2) { /* Value - might not be present in ReadAccessResult */ - if (lvt_is_opening_tag(lvt) && class_tag) { + if (tag_is_opening(tag_info)) { tt = proto_tree_add_text(tree, tvb, offset, 1, "propertyValue"); subtree = proto_item_add_subtree(tt, ett_bacapp_value); - offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt); offset = fAbstractSyntaxNType (tvb, subtree, offset); - offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt); } } } @@ -2597,22 +2607,22 @@ fDailySchedule (tvbuff_t *tvb, proto_tree *subtree, guint offset) { guint lastoffset = 0; - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; while ((tvb_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */ lastoffset = offset; - fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); - if (lvt_is_closing_tag(lvt) && class_tag) { + fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt); + if (tag_is_closing(tag_info)) { offset += fTagHeaderTree (tvb, subtree, offset, - &tag_no, &class_tag, &lvt); + &tag_no, &tag_info, &lvt); return offset; } switch (tag_no) { case 0: /* day-schedule */ - if (lvt_is_opening_tag(lvt) && class_tag) { - offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &class_tag, &lvt); + if (tag_is_opening(tag_info)) { + offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); offset = fTimeValue (tvb, subtree, offset); break; } @@ -2629,7 +2639,7 @@ fWeeklySchedule (tvbuff_t *tvb, proto_tree *tree, guint offset) { guint lastoffset = 0; - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; guint i=1; proto_tree *subtree = tree; @@ -2637,10 +2647,10 @@ while ((tvb_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */ lastoffset = offset; - fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); - if (lvt_is_closing_tag(lvt) && class_tag) { + fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt); + if (tag_is_closing(tag_info)) { offset += fTagHeaderTree (tvb, tree, offset, - &tag_no, &class_tag, &lvt); + &tag_no, &tag_info, &lvt); return offset; } tt = proto_tree_add_text(tree, tvb, offset, 0, val_to_str(i++, days, "day of week (%d) not found")); @@ -2725,7 +2735,7 @@ fConfirmedPrivateTransferRequest(tvbuff_t *tvb, proto_tree *tree, guint offset) { guint lastoffset = 0; - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; proto_tree *subtree = tree; proto_item *tt; @@ -2733,12 +2743,12 @@ /* exit loop if nothing happens inside */ while ((tvb_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { lastoffset = offset; - fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); - if (lvt_is_closing_tag(lvt) && class_tag) { + 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 += fTagHeaderTree (tvb, subtree, offset, - &tag_no, &class_tag, &lvt); + &tag_no, &tag_info, &lvt); subtree = tree; continue; } @@ -2756,11 +2766,9 @@ offset = fUnsignedTag (tvb, subtree, offset, "service Number: "); break; case 2: /*serviceParameters */ - if (lvt_is_opening_tag(lvt) && class_tag) { + if (tag_is_opening(tag_info)) { tt = proto_tree_add_text(subtree, tvb, offset, 1, "service Parameters"); - offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &class_tag, &lvt); subtree = proto_item_add_subtree(tt, ett_bacapp_value); - offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &class_tag, &lvt); propertyIdentifier = -1; offset = fAbstractSyntaxNType (tvb, subtree, offset); break; @@ -2790,7 +2798,7 @@ fLifeSafetyOperationRequest(tvbuff_t *tvb, proto_tree *tree, guint offset, const gchar *label) { guint lastoffset = 0; - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; proto_tree *subtree = tree; proto_item *tt; @@ -2802,7 +2810,7 @@ while ((tvb_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */ lastoffset = offset; - fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); + fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt); switch (tag_no) { case 0: /* subscriberProcessId */ @@ -2894,7 +2902,7 @@ fNotificationParameters (tvbuff_t *tvb, proto_tree *tree, guint offset) { guint lastoffset = offset; - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; proto_tree *subtree = tree; proto_item *tt; @@ -2902,7 +2910,7 @@ tt = proto_tree_add_text(subtree, tvb, offset, 0, "notification parameters"); subtree = proto_item_add_subtree(tt, ett_bacapp_value); /* Opeing tag for parameter choice */ - offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt); switch (tag_no) { case 0: /* change-of-bitstring */ @@ -2928,9 +2936,9 @@ lastoffset = offset; switch (fTagNo(tvb, offset)) { case 0: - offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt); offset = fBACnetPropertyStates(tvb, subtree, offset); - offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt); case 1: offset = fEnumeratedTag (tvb, subtree, offset, "status-flags: ", BACnetStatusFlags); @@ -2946,7 +2954,7 @@ lastoffset = offset; switch (fTagNo(tvb, offset)) { case 0: - offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt); switch (fTagNo(tvb, offset)) { case 0: offset = fBitStringTag (tvb, subtree, offset, @@ -2959,7 +2967,7 @@ default: break; } - offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt); break; case 1: offset = fEnumeratedTag (tvb, subtree, offset, @@ -2975,17 +2983,17 @@ lastoffset = offset; switch (fTagNo(tvb, offset)) { case 0: /* "command-value: " */ - offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt); offset = fAbstractSyntaxNType (tvb, subtree, offset); - offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt); break; case 1: offset = fEnumeratedTag (tvb, subtree, offset, "status-flags: ", BACnetStatusFlags); case 2: /* "feedback-value: " */ - offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt); offset = fAbstractSyntaxNType (tvb, subtree, offset); - offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt); default: break; } @@ -3050,14 +3058,14 @@ offset = fObjectIdentifier (tvb, subtree, offset); /* buffer-object */ break; case 2: - offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt); offset = fDateTime (tvb, subtree, offset, "previous-notification: "); - offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt); break; case 3: - offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt); offset = fDateTime (tvb, subtree, offset, "current-notification: "); - offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt); default: break; } @@ -3091,7 +3099,7 @@ break; } /* Closing tag for parameter choice */ - offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree(tvb, subtree, offset, &tag_no, &tag_info, &lvt); return offset; } @@ -3337,7 +3345,7 @@ fConfirmedEventNotificationRequest (tvbuff_t *tvb, proto_tree *tree, guint offset) { guint lastoffset = 0; - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; while ((tvb_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */ @@ -3354,9 +3362,9 @@ offset = fObjectIdentifier (tvb, tree, offset); break; case 3: /* time stamp */ - offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt); offset = fTimeStamp (tvb, tree, offset); - offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt); break; case 4: /* notificationClass */ offset = fUnsignedTag (tvb, tree, offset, "Notification Class: "); @@ -3387,9 +3395,9 @@ "to State: ", BACnetEventState, 64); break; case 12: /* NotificationParameters */ - offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt); offset = fNotificationParameters (tvb, tree, offset); - offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt); break; default: break; @@ -3408,17 +3416,17 @@ fConfirmedCOVNotificationRequest (tvbuff_t *tvb, proto_tree *tree, guint offset) { guint lastoffset = 0; - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; proto_tree *subtree = tree; proto_item *tt; while ((tvb_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */ lastoffset = offset; - fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); - if (lvt_is_closing_tag(lvt) && class_tag) { + fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt); + if (tag_is_closing(tag_info)) { offset += fTagHeaderTree (tvb, subtree, offset, - &tag_no, &class_tag, &lvt); + &tag_no, &tag_info, &lvt); subtree = tree; continue; } @@ -3437,10 +3445,10 @@ offset = fTimeSpan (tvb, tree, offset, "Time remaining"); break; case 4: /* List of Values */ - if (lvt_is_opening_tag(lvt) && class_tag) { + 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, &class_tag, &lvt); + offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); offset = fBACnetPropertyValue (tvb, subtree, offset); break; } @@ -3515,7 +3523,7 @@ fGetEnrollmentSummaryRequest (tvbuff_t *tvb, proto_tree *tree, guint offset) { guint lastoffset = 0; - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; while ((tvb_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */ @@ -3526,7 +3534,7 @@ "acknowledgment Filter: ", BACnetAcknowledgementFilter); break; case 1: /* eventObjectId */ - offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt); offset = fRecipientProcess (tvb, tree, offset); break; case 2: /* eventStateFilter */ @@ -3639,14 +3647,14 @@ fGetEventInformationACK (tvbuff_t *tvb, proto_tree *tree, guint offset) { guint lastoffset = 0; - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; while ((tvb_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */ lastoffset = offset; switch (fTagNo(tvb, offset)) { case 0: /* listOfEventSummaries */ - offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree (tvb, tree, offset, &tag_no, &tag_info, &lvt); offset = flistOfEventSummaries (tvb, tree, offset); break; case 1: /* moreEvents */ @@ -3664,17 +3672,17 @@ fAddListElementRequest(tvbuff_t *tvb, proto_tree *tree, guint offset) { guint lastoffset = 0; - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; proto_tree *subtree = tree; proto_item *tt; while ((tvb_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */ lastoffset = offset; - fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); - if (lvt_is_closing_tag(lvt) && class_tag) { + fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt); + if (tag_is_closing(tag_info)) { offset += fTagHeaderTree (tvb, subtree, offset, - &tag_no, &class_tag, &lvt); + &tag_no, &tag_info, &lvt); subtree = tree; continue; } @@ -3684,10 +3692,10 @@ offset = fBACnetObjectPropertyReference (tvb, subtree, offset); break; case 3: /* listOfElements */ - if (lvt_is_opening_tag(lvt) && class_tag) { + 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, &class_tag, &lvt); + offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); offset = fAbstractSyntaxNType (tvb, subtree, offset); break; } @@ -3878,17 +3886,17 @@ fReadPropertyAck (tvbuff_t *tvb, proto_tree *tree, guint offset) { guint lastoffset = 0; - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; proto_tree *subtree = tree; proto_item *tt; while ((tvb_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */ lastoffset = offset; - fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); - if (lvt_is_closing_tag(lvt) && class_tag) { + fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt); + if (tag_is_closing(tag_info)) { offset += fTagHeaderTree (tvb, subtree, offset, - &tag_no, &class_tag, &lvt); + &tag_no, &tag_info, &lvt); subtree = tree; continue; } @@ -3903,10 +3911,10 @@ offset = fSignedTag (tvb, subtree, offset, "property Array Index: "); break; case 3: /* propertyValue */ - if (lvt_is_opening_tag(lvt) && class_tag) { + if (tag_is_opening(tag_info)) { tt = proto_tree_add_text(subtree, tvb, offset, 1, "propertyValue"); subtree = proto_item_add_subtree(tt, ett_bacapp_value); - offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); offset = fAbstractSyntaxNType (tvb, subtree, offset); break; } @@ -3923,17 +3931,17 @@ fWritePropertyRequest(tvbuff_t *tvb, proto_tree *tree, guint offset) { guint lastoffset = 0; - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; proto_tree *subtree = tree; proto_item *tt; while ((tvb_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */ lastoffset = offset; - fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); - if (lvt_is_closing_tag(lvt) && class_tag) { + fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt); + if (tag_is_closing(tag_info)) { offset += fTagHeaderTree (tvb, subtree, offset, - &tag_no, &class_tag, &lvt); + &tag_no, &tag_info, &lvt); subtree = tree; continue; } @@ -3949,10 +3957,10 @@ offset = fSignedTag (tvb, subtree, offset, "property Array Index: "); break; case 3: /* propertyValue */ - if (lvt_is_opening_tag(lvt) && class_tag) { + if (tag_is_opening(tag_info)) { tt = proto_tree_add_text(subtree, tvb, offset, 1, "propertyValue"); subtree = proto_item_add_subtree(tt, ett_bacapp_value); - offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); offset = fAbstractSyntaxNType (tvb, subtree, offset); break; } @@ -3972,15 +3980,15 @@ fWriteAccessSpecification (tvbuff_t *tvb, proto_tree *subtree, guint offset) { guint lastoffset = 0; - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; while ((tvb_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */ lastoffset = offset; - fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); - if (lvt_is_closing_tag(lvt) && class_tag) { + fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt); + if (tag_is_closing(tag_info)) { offset += fTagHeaderTree (tvb, subtree, offset, - &tag_no, &class_tag, &lvt); + &tag_no, &tag_info, &lvt); continue; } @@ -3989,8 +3997,8 @@ offset = fObjectIdentifier (tvb, subtree, offset); break; case 1: /* listOfPropertyValues */ - if (lvt_is_opening_tag(lvt) && class_tag) { - offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &class_tag, &lvt); + if (tag_is_opening(tag_info)) { + offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); offset = fBACnetPropertyValue (tvb, subtree, offset); break; } @@ -4016,13 +4024,13 @@ fPropertyReference (tvbuff_t *tvb, proto_tree *tree, guint offset, guint8 tagoffset, guint8 list) { guint lastoffset = 0; - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; while ((tvb_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */ lastoffset = offset; - fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); - if (lvt_is_closing_tag(lvt) && class_tag) { /* closing Tag, but not for me */ + fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt); + if (tag_is_closing(tag_info)) { /* closing Tag, but not for me */ return offset; } switch (tag_no-tagoffset) { @@ -4072,17 +4080,17 @@ fObjectPropertyValue (tvbuff_t *tvb, proto_tree *tree, guint offset) { guint lastoffset = 0; - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; proto_tree* subtree = tree; proto_item* tt; while ((tvb_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */ lastoffset = offset; - fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); - if (lvt_is_closing_tag(lvt) && class_tag) { + fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt); + if (tag_is_closing(tag_info)) { offset += fTagHeaderTree (tvb, subtree, offset, - &tag_no, &class_tag, &lvt); + &tag_no, &tag_info, &lvt); continue; } switch (tag_no) { @@ -4096,10 +4104,10 @@ offset = fUnsignedTag (tvb, subtree, offset, "property Array Index: "); break; case 3: /* Value */ - if (lvt_is_opening_tag(lvt) && class_tag) { + if (tag_is_opening(tag_info)) { tt = proto_tree_add_text(subtree, tvb, offset, 1, "propertyValue"); subtree = proto_item_add_subtree(tt, ett_bacapp_value); - offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); offset = fAbstractSyntaxNType (tvb, subtree, offset); break; } @@ -4184,15 +4192,15 @@ static guint fSpecialEvent (tvbuff_t *tvb, proto_tree *subtree, guint offset) { - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; guint lastoffset = 0; while ((tvb_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */ lastoffset = offset; - fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); - if (lvt_is_closing_tag(lvt) && class_tag) { - offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &class_tag, &lvt); + 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; } @@ -4204,8 +4212,8 @@ offset = fObjectIdentifier (tvb, subtree, offset); break; case 2: /* calendarReference */ - if (lvt_is_opening_tag(lvt) && class_tag) { - offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &class_tag, &lvt); + if (tag_is_opening(tag_info)) { + offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); offset = fTimeValue (tvb, subtree, offset); break; } @@ -4254,15 +4262,15 @@ fObjectSelectionCriteria (tvbuff_t *tvb, proto_tree *subtree, guint offset) { guint lastoffset = 0; - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; while ((tvb_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */ lastoffset = offset; - fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); - if (lvt_is_closing_tag(lvt) && class_tag) { + fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt); + if (tag_is_closing(tag_info)) { offset += fTagHeaderTree (tvb, subtree, offset, - &tag_no, &class_tag, &lvt); + &tag_no, &tag_info, &lvt); continue; } @@ -4272,8 +4280,8 @@ "selection Logic: ", BACnetSelectionLogic); break; case 1: /* listOfSelectionCriteria */ - if (lvt_is_opening_tag(lvt) && class_tag) { - offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &class_tag, &lvt); + if (tag_is_opening(tag_info)) { + offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); offset = fSelectionCriteria (tvb, subtree, offset); break; } @@ -4291,14 +4299,14 @@ fReadPropertyConditionalRequest(tvbuff_t *tvb, proto_tree *subtree, guint offset) { guint lastoffset = 0; - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; while ((tvb_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */ lastoffset = offset; - fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); - if (lvt_is_closing_tag(lvt) && class_tag) { - offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &class_tag, &lvt); + 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; } @@ -4307,8 +4315,8 @@ offset = fObjectSelectionCriteria (tvb, subtree, offset); break; case 1: /* listOfPropertyReferences */ - if (lvt_is_opening_tag(lvt) && class_tag) { - offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &class_tag, &lvt); + if (tag_is_opening(tag_info)) { + offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); offset = fBACnetPropertyReference (tvb, subtree, offset, 1); break; } @@ -4325,15 +4333,15 @@ fReadAccessSpecification (tvbuff_t *tvb, proto_tree *subtree, guint offset) { guint lastoffset = 0; - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; while ((tvb_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */ lastoffset = offset; - fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); - if (lvt_is_closing_tag(lvt) && class_tag) { + fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt); + if (tag_is_closing(tag_info)) { offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, - &class_tag, &lvt); + &tag_info, &lvt); continue; } @@ -4342,8 +4350,8 @@ offset = fObjectIdentifier (tvb, subtree, offset); break; case 1: /* listOfPropertyReferences */ - if (lvt_is_opening_tag(lvt) && class_tag) { - offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &class_tag, &lvt); + if (tag_is_opening(tag_info)) { + offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); offset = fBACnetPropertyReference (tvb, subtree, offset, 1); break; } @@ -4361,17 +4369,17 @@ { guint lastoffset = 0; guint8 tag_no; - guint8 class_tag; + guint8 tag_info; guint32 lvt; proto_tree *subtree = tree; proto_item *tt; while ((tvb_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */ lastoffset = offset; - fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); - if (lvt_is_closing_tag(lvt) && class_tag) { + fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt); + if (tag_is_closing(tag_info)) { offset += fTagHeaderTree (tvb, subtree, offset, - &tag_no, &class_tag, &lvt); + &tag_no, &tag_info, &lvt); if (tag_no == 4 || tag_no == 5) subtree = tree; /* Value and error have extra subtree */ continue; } @@ -4381,10 +4389,10 @@ offset = fObjectIdentifier (tvb, subtree, offset); break; case 1: /* list of Results */ - if (lvt_is_opening_tag(lvt) && class_tag) { + if (tag_is_opening(tag_info)) { tt = proto_tree_add_text(subtree, tvb, offset, 1, "listOfResults"); subtree = proto_item_add_subtree(tt, ett_bacapp_value); - offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); break; } FAULT; @@ -4393,10 +4401,10 @@ offset = fPropertyValue(tvb, subtree, offset, 2); break; case 5: /* propertyAccessError */ - if (lvt_is_opening_tag(lvt) && class_tag) { + 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, &class_tag, &lvt); + offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); /* Error Code follows */ offset = fError(tvb, subtree, offset); break; @@ -4444,15 +4452,15 @@ fCreateObjectRequest(tvbuff_t *tvb, proto_tree *subtree, guint offset) { guint lastoffset = 0; - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; while ((tvb_length_remaining(tvb, offset) > 0) && (offset > lastoffset)) { /* exit loop if nothing happens inside */ lastoffset = offset; - fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); - if (lvt_is_closing_tag(lvt) && class_tag) { + fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt); + if (tag_is_closing(tag_info)) { offset += fTagHeaderTree (tvb, subtree, offset, - &tag_no, &class_tag, &lvt); + &tag_no, &tag_info, &lvt); continue; } @@ -4461,8 +4469,8 @@ offset = fObjectSpecifier (tvb, subtree, offset); break; case 1: /* propertyValue */ - if (lvt_is_opening_tag(lvt) && class_tag) { - offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &class_tag, &lvt); + if (tag_is_opening(tag_info)) { + offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); offset = fBACnetPropertyValue (tvb, subtree, offset); break; } @@ -4485,17 +4493,17 @@ fReadRangeRequest (tvbuff_t *tvb, proto_tree *tree, guint offset) { guint lastoffset = 0; - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; proto_tree *subtree = tree; proto_item *tt; while ((tvb_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */ lastoffset = offset; - fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); - if (lvt_is_closing_tag(lvt) && class_tag) { + fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt); + if (tag_is_closing(tag_info)) { offset += fTagHeaderTree (tvb, subtree, offset, - &tag_no, &class_tag, &lvt); + &tag_no, &tag_info, &lvt); subtree = tree; continue; } @@ -4511,10 +4519,10 @@ offset = fUnsignedTag (tvb, subtree, offset, "Property Array Index: "); break; case 3: /* range byPosition */ - if (lvt_is_opening_tag(lvt) && class_tag) { + if (tag_is_opening(tag_info)) { tt = proto_tree_add_text(subtree, tvb, offset, 1, "range byPosition"); subtree = proto_item_add_subtree(tt, ett_bacapp_value); - offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); offset = fApplicationTypes (tvb, subtree, offset, "reference Index: "); offset = fApplicationTypes (tvb, subtree, offset, "reference Count: "); break; @@ -4522,10 +4530,10 @@ FAULT; break; case 4: /* range byTime */ - if (lvt_is_opening_tag(lvt) && class_tag) { + if (tag_is_opening(tag_info)) { tt = proto_tree_add_text(subtree, tvb, offset, 1, "range byTime"); subtree = proto_item_add_subtree(tt, ett_bacapp_value); - offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); offset = fApplicationTypes (tvb, subtree, offset, "reference Time: "); offset = fApplicationTypes (tvb, subtree, offset, "reference Count: "); break; @@ -4533,10 +4541,10 @@ FAULT; break; case 5: /* range timeRange */ - if (lvt_is_opening_tag(lvt) && class_tag) { + if (tag_is_opening(tag_info)) { tt = proto_tree_add_text(subtree, tvb, offset, 1, "range timeRange"); subtree = proto_item_add_subtree(tt, ett_bacapp_value); - offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); offset = fApplicationTypes (tvb, subtree, offset, "beginning Time: "); offset = fApplicationTypes (tvb, subtree, offset, "ending Time: "); break; @@ -4554,16 +4562,16 @@ fReadRangeAck (tvbuff_t *tvb, proto_tree *tree, guint offset) { guint lastoffset = 0; - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; proto_tree *subtree = tree; proto_item *tt; while ((tvb_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */ lastoffset = offset; - fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); - if (lvt_is_closing_tag(lvt) && class_tag) { - offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &class_tag, &lvt); + fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt); + if (tag_is_closing(tag_info)) { + offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); subtree = tree; continue; } @@ -4586,10 +4594,10 @@ offset = fUnsignedTag (tvb, subtree, offset, "item Count: "); break; case 5: /* itemData */ - if (lvt_is_opening_tag(lvt) && class_tag) { + if (tag_is_opening(tag_info)) { 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, &class_tag, &lvt); + offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); offset = fAbstractSyntaxNType (tvb, subtree, offset); break; } @@ -4607,36 +4615,35 @@ static guint fAccessMethod(tvbuff_t *tvb, proto_tree *tree, guint offset) { - guint32 lvt; - guint8 tag_no, class_tag; - proto_item* tt; - proto_tree* subtree; + guint32 lvt; + guint8 tag_no, tag_info; + proto_item* tt; + proto_tree* subtree; - subtree = tree; - fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); + fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt); switch (tag_no) { case 0: /* streamAccess */ - if (lvt_is_opening_tag(lvt) && class_tag) { + if (tag_is_opening(tag_info)) { tt = proto_tree_add_text(tree, tvb, offset, 1, "stream Access"); subtree = proto_item_add_subtree(tt, ett_bacapp_value); - offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); offset = fApplicationTypes (tvb, subtree, offset, "File Start Position: "); offset = fApplicationTypes (tvb, subtree, offset, "file Data: "); } if (bacapp_flags & 0x04) { /* More Flag is set */ break; } - fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); - if (lvt_is_closing_tag(lvt) && class_tag) { - offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &class_tag, &lvt); + fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt); + if (tag_is_closing(tag_info)) { + offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); } break; case 1: /* recordAccess */ - if (lvt_is_opening_tag(lvt) && class_tag) { + if (tag_is_opening(tag_info)) { tt = proto_tree_add_text(tree, tvb, offset, 1, "record Access"); subtree = proto_item_add_subtree(tt, ett_bacapp_value); - offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); offset = fApplicationTypes (tvb, subtree, offset, "File Start Record: "); offset = fApplicationTypes (tvb, subtree, offset, "Record Count: "); offset = fApplicationTypes (tvb, subtree, offset, "Data: "); @@ -4644,9 +4651,9 @@ if (bacapp_flags & 0x04) { /* More Flag is set */ break; } - fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); - if (lvt_is_closing_tag(lvt) && class_tag) { - offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &class_tag, &lvt); + fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt); + if (tag_is_closing(tag_info)) { + offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); } break; default: @@ -4660,7 +4667,7 @@ fAtomicReadFileRequest(tvbuff_t *tvb, proto_tree *tree, guint offset) { guint lastoffset = 0; - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; proto_tree *subtree = tree; proto_item *tt; @@ -4669,20 +4676,20 @@ while ((tvb_length_remaining(tvb, offset) > 0)&&(offset>lastoffset)) { /* exit loop if nothing happens inside */ lastoffset = offset; - fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); - if (lvt_is_closing_tag(lvt) && class_tag) { + fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt); + if (tag_is_closing(tag_info)) { offset += fTagHeaderTree (tvb, subtree, offset, - &tag_no, &class_tag, &lvt); + &tag_no, &tag_info, &lvt); subtree = tree; continue; } switch (tag_no) { case 0: /* streamAccess */ - if (lvt_is_opening_tag(lvt) && class_tag) { + if (tag_is_opening(tag_info)) { tt = proto_tree_add_text(subtree, tvb, offset, 1, "stream Access"); subtree = proto_item_add_subtree(tt, ett_bacapp_value); - offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); offset = fSignedTag (tvb, subtree, offset, "File Start Position: "); offset = fUnsignedTag (tvb, subtree, offset, "requested Octet Count: "); break; @@ -4690,10 +4697,10 @@ FAULT; break; case 1: /* recordAccess */ - if (lvt_is_opening_tag(lvt) && class_tag) { + if (tag_is_opening(tag_info)) { tt = proto_tree_add_text(subtree, tvb, offset, 1, "record Access"); subtree = proto_item_add_subtree(tt, ett_bacapp_value); - offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &class_tag, &lvt); + offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt); offset = fSignedTag (tvb, subtree, offset, "File Start Record: "); offset = fUnsignedTag (tvb, subtree, offset, "requested Record Count: "); break; @@ -4712,7 +4719,7 @@ { offset = fObjectIdentifier (tvb, tree, offset); /* file Identifier */ - offset = fAccessMethod(tvb, tree, offset); + offset = fAccessMethod(tvb, tree, offset); return offset; } @@ -4736,15 +4743,15 @@ static guint fAtomicReadFileAck (tvbuff_t *tvb, proto_tree *tree, guint offset) { - guint8 tag_no, class_tag; + guint8 tag_no, tag_info; guint32 lvt; proto_tree *subtree = tree; - fTagHeader (tvb, offset, &tag_no, &class_tag, &lvt); + fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt); offset = fApplicationTypes (tvb, subtree, offset, "End Of File: "); - offset = fAccessMethod(tvb, tree, offset); + offset = fAccessMethod(tvb, tree, offset); - return offset; + return offset; } static guint @@ -5158,6 +5165,16 @@ return offset; } +static guint fContextTaggedError(tvbuff_t *tvb, 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, tree, offset); + return offset + fTagHeaderTree(tvb, tree, offset, &parsed_tag, &tag_info, &lvt); +} + static guint fConfirmedPrivateTransferError(tvbuff_t *tvb, proto_tree *tree, guint offset) { @@ -5167,7 +5184,7 @@ lastoffset = offset; switch (fTagNo(tvb, offset)) { case 0: /* errorType */ - offset = fError (tvb,tree,offset); + offset = fContextTaggedError(tvb,tree,offset); break; case 1: /* vendorID */ offset = fUnsignedTag (tvb,tree,offset,"vendor ID: "); @@ -5194,7 +5211,7 @@ lastoffset = offset; switch (fTagNo(tvb, offset)) { case 0: /* errorType */ - offset = fError (tvb,tree,offset); + offset = fContextTaggedError(tvb,tree,offset); break; case 1: /* firstFailedElementNumber */ offset = fUnsignedTag (tvb,tree,offset,"first failed element number: "); @@ -5215,7 +5232,7 @@ lastoffset = offset; switch (fTagNo(tvb, offset)) { case 0: /* errorType */ - offset = fError (tvb,tree,offset); + offset = fContextTaggedError(tvb,tree,offset); break; case 1: /* firstFailedElementNumber */ offset = fUnsignedTag (tvb,tree,offset,"first failed element number: "); @@ -5247,7 +5264,7 @@ lastoffset = offset; switch (fTagNo(tvb, offset)) { case 0: /* errorType */ - offset = fError (tvb,tree,offset); + offset = fContextTaggedError(tvb,tree,offset); break; case 1: /* listOfVTSessionIdentifiers */ offset = fUnsignedTag (tvb,tree,offset,"VT SessionID: "); @@ -5268,7 +5285,7 @@ lastoffset = offset; switch (fTagNo(tvb, offset)) { case 0: /* errorType */ - offset = fError (tvb,tree,offset); + offset = fContextTaggedError(tvb,tree,offset); break; case 1: /* firstFailedWriteAttempt */ offset = fUnsignedTag (tvb,tree,offset,"first failed write attempt: "); @@ -5693,13 +5710,12 @@ const guint8 **inpp = &inp; guint8 **outpp = &outp; - if ((icd = iconv_open ("UTF-8", fromcoding)) != (iconv_t) -1) { - - i = iconv (icd, (char**) inpp, inbytesleft, (char**) outpp, outbytesleft); - *outpp[0] = '\0'; - iconv_close (icd); - return i; -} + if ((icd = iconv_open ("UTF-8", fromcoding)) != (iconv_t) -1) { + i = iconv (icd, (char**) inpp, inbytesleft, (char**) outpp, outbytesleft); + *outpp[0] = '\0'; + iconv_close (icd); + return i; + } #endif #endif
- Prev by Date: Re: SV: [Ethereal-dev] patch for packet-isakmp.c to fix decoding ikev2payload
- Next by Date: [Ethereal-dev] Re: [Ethereal-cvs] rev 16040: /trunk/epan/: sigcomp_state_hdlr.c
- Previous by thread: SV: [Ethereal-dev] Fuzz Testing -- patch for JXTA
- Next by thread: [Ethereal-dev] Re: [Ethereal-cvs] rev 16040: /trunk/epan/: sigcomp_state_hdlr.c
- Index(es):