Add tvbuff class.
[obnox/wireshark/wip.git] / packet-q2931.c
index 206b5754884f3a3bbdcdb27e77cd65367a15c96f..92361aa1378cee523bef96a28f212308b72dd1da 100644 (file)
@@ -2,7 +2,7 @@
  * Routines for Q.2931 frame disassembly
  * Guy Harris <guy@alum.mit.edu>
  *
- * $Id: packet-q2931.c,v 1.7 2000/01/13 05:41:22 guy Exp $
+ * $Id: packet-q2931.c,v 1.8 2000/05/11 08:15:36 gram Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@zing.org>
@@ -259,7 +259,7 @@ dissect_q2931_shift_ie(const u_char *pd, int offset, int len,
 
        non_locking_shift = (info_element == Q2931_IE_BBAND_NLOCKING_SHIFT);
        codeset = pd[offset] & 0x07;
-       proto_tree_add_text(tree, offset, 1, "%s shift to codeset %u: %s",
+       proto_tree_add_text(tree, NullTVB, offset, 1, "%s shift to codeset %u: %s",
            (non_locking_shift ? "Non-locking" : "Locking"),
            codeset,
            val_to_str(codeset, q2931_codeset_vals, "Unknown (0x%02X)"));
@@ -347,7 +347,7 @@ dissect_q2931_aal_parameters_ie(const u_char *pd, int offset, int len,
        if (len == 0)
                return;
        aal_type = pd[offset];
-       proto_tree_add_text(tree, offset, 1, "AAL type: %s",
+       proto_tree_add_text(tree, NullTVB, offset, 1, "AAL type: %s",
            val_to_str(aal_type, q9231_aal_type_vals, "Unknown (0x%02X)"));
        offset += 1;
        len -= 1;
@@ -361,7 +361,7 @@ dissect_q2931_aal_parameters_ie(const u_char *pd, int offset, int len,
                 */
                if (len > 4)
                        len = 4;
-               proto_tree_add_text(tree, offset, len,
+               proto_tree_add_text(tree, NullTVB, offset, len,
                    "User defined AAL information: %s",
                    bytes_to_str(&pd[offset], len));
                return;
@@ -375,7 +375,7 @@ dissect_q2931_aal_parameters_ie(const u_char *pd, int offset, int len,
                        if (len < 2)
                                return;
                        value = pd[offset + 1];
-                       proto_tree_add_text(tree, offset, 2,
+                       proto_tree_add_text(tree, NullTVB, offset, 2,
                            "Subtype: %s",
                            val_to_str(value, q9231_aal1_subtype_vals,
                            "Unknown (0x%02X)"));
@@ -387,7 +387,7 @@ dissect_q2931_aal_parameters_ie(const u_char *pd, int offset, int len,
                        if (len < 2)
                                return;
                        value = pd[offset + 1];
-                       proto_tree_add_text(tree, offset, 2,
+                       proto_tree_add_text(tree, NullTVB, offset, 2,
                            "CBR rate: %s",
                            val_to_str(value, q9231_aal1_cbr_rate_vals,
                            "Unknown (0x%02X)"));
@@ -399,7 +399,7 @@ dissect_q2931_aal_parameters_ie(const u_char *pd, int offset, int len,
                        if (len < 3)
                                return;
                        value = pntohs(&pd[offset + 1]);
-                       proto_tree_add_text(tree, offset, 3,
+                       proto_tree_add_text(tree, NullTVB, offset, 3,
                            "Multiplier: %u", value);
                        offset += 3;
                        len -= 3;
@@ -409,7 +409,7 @@ dissect_q2931_aal_parameters_ie(const u_char *pd, int offset, int len,
                        if (len < 2)
                                return;
                        value = pd[offset + 1];
-                       proto_tree_add_text(tree, offset, 2,
+                       proto_tree_add_text(tree, NullTVB, offset, 2,
                            "Source clock frequency recovery method: %s",
                            val_to_str(value, q2931_aal1_src_clk_rec_meth_vals,
                            "Unknown (0x%02X)"));
@@ -421,7 +421,7 @@ dissect_q2931_aal_parameters_ie(const u_char *pd, int offset, int len,
                        if (len < 2)
                                return;
                        value = pd[offset + 1];
-                       proto_tree_add_text(tree, offset, 2,
+                       proto_tree_add_text(tree, NullTVB, offset, 2,
                            "Error correction method: %s",
                            val_to_str(value, q2931_aal1_err_correction_method_vals,
                            "Unknown (0x%02X)"));
@@ -433,7 +433,7 @@ dissect_q2931_aal_parameters_ie(const u_char *pd, int offset, int len,
                        if (len < 3)
                                return;
                        value = pntohs(&pd[offset + 1]);
-                       proto_tree_add_text(tree, offset, 3,
+                       proto_tree_add_text(tree, NullTVB, offset, 3,
                            "Structured data transfer block size: %u", value);
                        offset += 3;
                        len -= 3;
@@ -443,7 +443,7 @@ dissect_q2931_aal_parameters_ie(const u_char *pd, int offset, int len,
                        if (len < 2)
                                return;
                        value = pd[offset + 1];
-                       proto_tree_add_text(tree, offset, 2,
+                       proto_tree_add_text(tree, NullTVB, offset, 2,
                            "Partially filled cells method: %u octets", value);
                        offset += 2;
                        len -= 2;
@@ -453,7 +453,7 @@ dissect_q2931_aal_parameters_ie(const u_char *pd, int offset, int len,
                        if (len < 3)
                                return;
                        value = pntohs(&pd[offset + 1]);
-                       proto_tree_add_text(tree, offset, 3,
+                       proto_tree_add_text(tree, NullTVB, offset, 3,
                            "Forward maximum CPCS-SDU size: %u", value);
                        offset += 3;
                        len -= 3;
@@ -463,7 +463,7 @@ dissect_q2931_aal_parameters_ie(const u_char *pd, int offset, int len,
                        if (len < 3)
                                return;
                        value = pntohs(&pd[offset + 1]);
-                       proto_tree_add_text(tree, offset, 3,
+                       proto_tree_add_text(tree, NullTVB, offset, 3,
                            "Backward maximum CPCS-SDU size: %u", value);
                        offset += 3;
                        len -= 3;
@@ -474,7 +474,7 @@ dissect_q2931_aal_parameters_ie(const u_char *pd, int offset, int len,
                                return;
                        low_mid = pntohs(&pd[offset + 1]);
                        high_mid = pntohs(&pd[offset + 3]);
-                       proto_tree_add_text(tree, offset, 3,
+                       proto_tree_add_text(tree, NullTVB, offset, 3,
                            "MID range: %u - %u", low_mid, high_mid);
                        offset += 5;
                        len -= 5;
@@ -484,7 +484,7 @@ dissect_q2931_aal_parameters_ie(const u_char *pd, int offset, int len,
                        if (len < 2)
                                return;
                        value = pd[offset + 1];
-                       proto_tree_add_text(tree, offset, 2,
+                       proto_tree_add_text(tree, NullTVB, offset, 2,
                            "SSCS type: %s",
                            val_to_str(value, q2931_sscs_type_vals,
                            "Unknown (0x%02X)"));
@@ -493,7 +493,7 @@ dissect_q2931_aal_parameters_ie(const u_char *pd, int offset, int len,
                        break;
 
                default:        /* unknown AAL parameter */
-                       proto_tree_add_text(tree, offset, 1,
+                       proto_tree_add_text(tree, NullTVB, offset, 1,
                            "Unknown AAL parameter (0x%02X)",
                            identifier);
                        return; /* give up */
@@ -565,7 +565,7 @@ dissect_q2931_atm_cell_rate_ie(const u_char *pd, int offset, int len,
                        value = (pd[offset + 1] << 16)
                              | (pd[offset + 2] << 8)
                              | (pd[offset + 3] << 0);
-                       proto_tree_add_text(tree, offset, 4,
+                       proto_tree_add_text(tree, NullTVB, offset, 4,
                            "%s: %u cell%s/s",
                            val_to_str(identifier, q2931_atm_td_subfield_vals,
                              NULL),
@@ -576,7 +576,7 @@ dissect_q2931_atm_cell_rate_ie(const u_char *pd, int offset, int len,
 
                case Q2931_ATM_CR_BEST_EFFORT_IND:
                        /* Yes, its value *IS* 0xBE.... */
-                       proto_tree_add_text(tree, offset, 1,
+                       proto_tree_add_text(tree, NullTVB, offset, 1,
                            "%s",
                            val_to_str(identifier, q2931_atm_td_subfield_vals,
                              NULL));
@@ -588,20 +588,20 @@ dissect_q2931_atm_cell_rate_ie(const u_char *pd, int offset, int len,
                        if (len < 2)
                                return;
                        value = pd[offset + 1];
-                       proto_tree_add_text(tree, offset, 2,
+                       proto_tree_add_text(tree, NullTVB, offset, 2,
                            "%s",
                            val_to_str(identifier, q2931_atm_td_subfield_vals,
                              NULL));
-                       proto_tree_add_text(tree, offset + 1, 1,
+                       proto_tree_add_text(tree, NullTVB, offset + 1, 1,
                            "%s allowed in forward direction",
                            (value & 0x80) ? "Frame discard" : "No frame discard");
-                       proto_tree_add_text(tree, offset + 1, 1,
+                       proto_tree_add_text(tree, NullTVB, offset + 1, 1,
                            "%s allowed in backward direction",
                            (value & 0x40) ? "Frame discard" : "No frame discard");
-                       proto_tree_add_text(tree, offset + 1, 1,
+                       proto_tree_add_text(tree, NullTVB, offset + 1, 1,
                            "Tagging %srequested in backward direction",
                            (value & 0x02) ? "" : "not ");
-                       proto_tree_add_text(tree, offset + 1, 1,
+                       proto_tree_add_text(tree, NullTVB, offset + 1, 1,
                            "Tagging %srequested in forward direction",
                            (value & 0x01) ? "" : "not ");
                        offset += 2;
@@ -609,7 +609,7 @@ dissect_q2931_atm_cell_rate_ie(const u_char *pd, int offset, int len,
                        break;
 
                default:        /* unknown ATM traffic descriptor element */
-                       proto_tree_add_text(tree, offset, 1,
+                       proto_tree_add_text(tree, NullTVB, offset, 1,
                            "Unknown ATM traffic descriptor element (0x%02X)",
                            identifier);
                        return; /* give up */
@@ -665,7 +665,7 @@ dissect_q2931_bband_bearer_cap_ie(const u_char *pd, int offset, int len,
        if (len == 0)
                return;
        octet = pd[offset];
-       proto_tree_add_text(tree, offset, 1,
+       proto_tree_add_text(tree, NullTVB, offset, 1,
            "Bearer class: %s",
            val_to_str(octet & 0x1F, q2931_bearer_class_vals,
            "Unknown (0x%02X)"));
@@ -676,7 +676,7 @@ dissect_q2931_bband_bearer_cap_ie(const u_char *pd, int offset, int len,
                return;
        if (!(octet & Q2931_IE_EXTENSION)) {
                octet = pd[offset];
-               proto_tree_add_text(tree, offset, 1,
+               proto_tree_add_text(tree, NullTVB, offset, 1,
                    "ATM Transfer Capability: %s",
                    val_to_str(octet & 0x1F, q2931_transfer_capability_vals,
                    "Unknown (0x%02X)"));
@@ -687,11 +687,11 @@ dissect_q2931_bband_bearer_cap_ie(const u_char *pd, int offset, int len,
        if (len == 0)
                return;
        octet = pd[offset];
-       proto_tree_add_text(tree, offset, 1,
+       proto_tree_add_text(tree, NullTVB, offset, 1,
            "Susceptibility to clipping: %s",
            val_to_str(octet & 0x60, q2931_susc_clip_vals,
            "Unknown (0x%02X)"));
-       proto_tree_add_text(tree, offset, 1,
+       proto_tree_add_text(tree, NullTVB, offset, 1,
            "User-plane connection configuration: %s",
            val_to_str(octet & 0x03, q2931_up_conn_config_vals,
            "Unknown (0x%02X)"));
@@ -717,7 +717,7 @@ dissect_q2931_bband_hi_layer_info_ie(const u_char *pd, int offset, int len,
        if (len == 0)
                return;
        octet = pd[offset];
-       proto_tree_add_text(tree, offset, 1,
+       proto_tree_add_text(tree, NullTVB, offset, 1,
            "High layer information type: %s",
            val_to_str(octet & 0x7F, q2931_hi_layer_info_type_vals,
            "Unknown (0x%02X)"));
@@ -800,7 +800,7 @@ dissect_q2931_bband_low_layer_info_ie(const u_char *pd, int offset, int len,
                /*
                 * Layer 1 information.
                 */
-               proto_tree_add_text(tree, offset, 1,
+               proto_tree_add_text(tree, NullTVB, offset, 1,
                    "User information layer 1 protocol: 0x%02X",
                    octet & 0x1F);
                offset += 1;
@@ -815,7 +815,7 @@ dissect_q2931_bband_low_layer_info_ie(const u_char *pd, int offset, int len,
                 * Layer 2 information.
                 */
                uil2_protocol = octet & 0x1F;
-               proto_tree_add_text(tree, offset, 1,
+               proto_tree_add_text(tree, NullTVB, offset, 1,
                    "User information layer 2 protocol: %s",
                    val_to_str(uil2_protocol, q2931_uil2_vals,
                      "Unknown (0x%02X)"));
@@ -828,11 +828,11 @@ dissect_q2931_bband_low_layer_info_ie(const u_char *pd, int offset, int len,
                        return;
                octet = pd[offset];
                if (uil2_protocol == Q2931_UIL2_USER_SPEC) {
-                       proto_tree_add_text(tree, offset, 1,
+                       proto_tree_add_text(tree, NullTVB, offset, 1,
                            "User-specified layer 2 protocol information: 0x%02X",
                            octet & 0x7F);
                } else {
-                       proto_tree_add_text(tree, offset, 1,
+                       proto_tree_add_text(tree, NullTVB, offset, 1,
                            "Mode: %s",
                            val_to_str(octet & 0x60, q2931_mode_vals,
                              "Unknown (0x%02X)"));
@@ -845,7 +845,7 @@ dissect_q2931_bband_low_layer_info_ie(const u_char *pd, int offset, int len,
                if (len == 0)
                        return;
                octet = pd[offset];
-               proto_tree_add_text(tree, offset, 1,
+               proto_tree_add_text(tree, NullTVB, offset, 1,
                    "Window size: %u k", octet & 0x7F);
                offset += 1;
                len -= 1;
@@ -861,7 +861,7 @@ l2_done:
                 * Layer 3 information.
                 */
                uil3_protocol = octet & 0x1F;
-               proto_tree_add_text(tree, offset, 1,
+               proto_tree_add_text(tree, NullTVB, offset, 1,
                    "User information layer 3 protocol: %s",
                    val_to_str(uil3_protocol, q2931_uil3_vals,
                      "Unknown (0x%02X)"));
@@ -882,7 +882,7 @@ l2_done:
                case Q2931_UIL3_X25_PL:
                case Q2931_UIL3_ISO_8208:
                case Q2931_UIL3_X223:
-                       proto_tree_add_text(tree, offset, 1,
+                       proto_tree_add_text(tree, NullTVB, offset, 1,
                            "Mode: %s",
                            val_to_str(octet & 0x60, q2931_mode_vals,
                              "Unknown (0x%02X)"));
@@ -894,7 +894,7 @@ l2_done:
                        if (len == 0)
                                return;
                        octet = pd[offset];
-                       proto_tree_add_text(tree, offset, 1,
+                       proto_tree_add_text(tree, NullTVB, offset, 1,
                            "Default packet size: %u", octet & 0x0F);
                        offset += 1;
                        len -= 1;
@@ -904,14 +904,14 @@ l2_done:
                        if (len == 0)
                                return;
                        octet = pd[offset];
-                       proto_tree_add_text(tree, offset, 1,
+                       proto_tree_add_text(tree, NullTVB, offset, 1,
                            "Packet window size: %u", octet & 0x7F);
                        offset += 1;
                        len -= 1;
                        break;
 
                case Q2931_UIL3_USER_SPEC:
-                       proto_tree_add_text(tree, offset, 1,
+                       proto_tree_add_text(tree, NullTVB, offset, 1,
                            "Default packet size: %u octets",
                            1 << (octet & 0x0F));
                        offset += 1;
@@ -925,7 +925,7 @@ l2_done:
                        if (len < 2)
                                return;
                        add_l3_info |= (pd[offset + 1] & 0x40) >> 6;
-                       proto_tree_add_text(tree, offset, 2,
+                       proto_tree_add_text(tree, NullTVB, offset, 2,
                            "Additional layer 3 protocol information: %s",
                            val_to_str(add_l3_info, nlpid_vals,
                              "Unknown (0x%02X)"));
@@ -938,7 +938,7 @@ l2_done:
                                len -= 1;
                                organization_code = 
                                    pd[offset] << 16 | pd[offset+1] << 8 | pd[offset+2];
-                               proto_tree_add_text(tree, offset, 3,
+                               proto_tree_add_text(tree, NullTVB, offset, 3,
                                    "Organization Code: 0x%06X (%s)",
                                    organization_code,
                                    val_to_str(organization_code, oui_vals,
@@ -952,21 +952,21 @@ l2_done:
                                switch (organization_code) {
 
                                case OUI_ENCAP_ETHER:
-                                       proto_tree_add_text(tree, offset, 2,
+                                       proto_tree_add_text(tree, NullTVB, offset, 2,
                                            "Ethernet type: %s",
                                            val_to_str(pid, etype_vals,
                                                "Unknown (0x%04X)"));
                                        break;
 
                                case OUI_ATM_FORUM:
-                                       proto_tree_add_text(tree, offset, 2,
+                                       proto_tree_add_text(tree, NullTVB, offset, 2,
                                            "LANE Protocol ID: %s",
                                            val_to_str(pid, lane_pid_vals,
                                                "Unknown (0x%04X)"));
                                        break;
 
                                default:
-                                       proto_tree_add_text(tree, offset, 2,
+                                       proto_tree_add_text(tree, NullTVB, offset, 2,
                                            "Protocol ID: 0x%04X", pid);
                                        break;
                                }
@@ -1098,7 +1098,7 @@ dissect_q2931_cause_ie(const u_char *pd, int offset, int len,
        if (len == 0)
                return;
        octet = pd[offset];
-       proto_tree_add_text(tree, offset, 1,
+       proto_tree_add_text(tree, NullTVB, offset, 1,
            "Location: %s",
            val_to_str(octet & 0x0F, q2931_cause_location_vals,
              "Unknown (0x%X)"));
@@ -1109,7 +1109,7 @@ dissect_q2931_cause_ie(const u_char *pd, int offset, int len,
                return;
        octet = pd[offset];
        cause_value = octet & 0x7F;
-       proto_tree_add_text(tree, offset, 1,
+       proto_tree_add_text(tree, NullTVB, offset, 1,
            "Cause value: %s",
            val_to_str(cause_value, q2931_cause_code_vals,
              "Unknown (0x%X)"));
@@ -1124,13 +1124,13 @@ dissect_q2931_cause_ie(const u_char *pd, int offset, int len,
        case Q2931_CAUSE_NO_ROUTE_TO_DEST:
        case Q2931_CAUSE_QOS_UNAVAILABLE:
                octet = pd[offset];
-               proto_tree_add_text(tree, offset, 1,
+               proto_tree_add_text(tree, NullTVB, offset, 1,
                    "Network service: %s",
                    (octet & 0x80) ? "User" : "Provider");
-               proto_tree_add_text(tree, offset, 1,
+               proto_tree_add_text(tree, NullTVB, offset, 1,
                    "%s",
                    (octet & 0x40) ? "Abnormal" : "Normal");
-               proto_tree_add_text(tree, offset, 1,
+               proto_tree_add_text(tree, NullTVB, offset, 1,
                    "Condition: %s",
                    val_to_str(octet & 0x03, q2931_cause_condition_vals,
                      "Unknown (0x%X)"));
@@ -1138,11 +1138,11 @@ dissect_q2931_cause_ie(const u_char *pd, int offset, int len,
                
        case Q2931_CAUSE_CALL_REJECTED:
                rejection_reason = octet & 0x7C;
-               proto_tree_add_text(tree, offset, 1,
+               proto_tree_add_text(tree, NullTVB, offset, 1,
                    "Rejection reason: %s",
                    val_to_str(octet & 0x7C, q2931_cause_condition_vals,
                      "Unknown (0x%X)"));
-               proto_tree_add_text(tree, offset, 1,
+               proto_tree_add_text(tree, NullTVB, offset, 1,
                    "Condition: %s",
                    val_to_str(octet & 0x03, q2931_cause_condition_vals,
                      "Unknown (0x%X)"));
@@ -1154,27 +1154,27 @@ dissect_q2931_cause_ie(const u_char *pd, int offset, int len,
                switch (rejection_reason) {
 
                case Q2931_REJ_USER_SPECIFIC:
-                       proto_tree_add_text(tree, offset, len,
+                       proto_tree_add_text(tree, NullTVB, offset, len,
                            "User specific diagnostic: %s",
                            bytes_to_str(&pd[offset], len));
                        break;
 
                case Q2931_REJ_IE_MISSING:
-                       proto_tree_add_text(tree, offset, 1,
+                       proto_tree_add_text(tree, NullTVB, offset, 1,
                            "Missing information element: %s",
                            val_to_str(pd[offset], q2931_info_element_vals,
                              "Unknown (0x%02X)"));
                        break;
 
                case Q2931_REJ_IE_INSUFFICIENT:
-                       proto_tree_add_text(tree, offset, 1,
+                       proto_tree_add_text(tree, NullTVB, offset, 1,
                            "Insufficient information element: %s",
                            val_to_str(pd[offset], q2931_info_element_vals,
                              "Unknown (0x%02X)"));
                        break;
 
                default:
-                       proto_tree_add_text(tree, offset, len,
+                       proto_tree_add_text(tree, NullTVB, offset, len,
                            "Diagnostic: %s",
                            bytes_to_str(&pd[offset], len));
                        break;
@@ -1206,7 +1206,7 @@ dissect_q2931_cause_ie(const u_char *pd, int offset, int len,
        case Q2931_CAUSE_IE_NONEX_OR_UNIMPL:
        case Q2931_CAUSE_INVALID_IE_CONTENTS:
                do {
-                       proto_tree_add_text(tree, offset, 1,
+                       proto_tree_add_text(tree, NullTVB, offset, 1,
                            "Information element: %s",
                            val_to_str(pd[offset], q2931_info_element_vals,
                              "Unknown (0x%02X)"));
@@ -1217,7 +1217,7 @@ dissect_q2931_cause_ie(const u_char *pd, int offset, int len,
 
        case Q2931_CAUSE_CELL_RATE_UNAVAIL:
                do {
-                       proto_tree_add_text(tree, offset, 1,
+                       proto_tree_add_text(tree, NullTVB, offset, 1,
                            "Cell rate subfield identifier: %s",
                            val_to_str(pd[offset], q2931_atm_td_subfield_vals,
                              "Unknown (0x%02X)"));
@@ -1229,20 +1229,20 @@ dissect_q2931_cause_ie(const u_char *pd, int offset, int len,
        case Q2931_CAUSE_CHAN_NONEXISTENT:
                if (len < 2)
                        return;
-               proto_tree_add_text(tree, offset, 2,
+               proto_tree_add_text(tree, NullTVB, offset, 2,
                    "VPCI: %u", pntohs(&pd[offset]));
                offset += 2;
                len -= 2;
 
                if (len < 2)
                        return;
-               proto_tree_add_text(tree, offset, 2,
+               proto_tree_add_text(tree, NullTVB, offset, 2,
                    "VCI: %u", pntohs(&pd[offset]));
                break;
 
        case Q2931_CAUSE_MT_NONEX_OR_UNIMPL:
        case Q2931_CAUSE_MSG_INCOMPAT_W_CS:
-               proto_tree_add_text(tree, offset, 1,
+               proto_tree_add_text(tree, NullTVB, offset, 1,
                    "Message type: %s",
                    val_to_str(pd[offset], q2931_message_type_vals,
                      "Unknown (0x%02X)"));
@@ -1251,12 +1251,12 @@ dissect_q2931_cause_ie(const u_char *pd, int offset, int len,
        case Q2931_CAUSE_REC_TIMER_EXP:
                if (len < 3)
                        return;
-               proto_tree_add_text(tree, offset, 3,
+               proto_tree_add_text(tree, NullTVB, offset, 3,
                    "Timer: %.3s", &pd[offset]);
                break;
 
        default:
-               proto_tree_add_text(tree, offset, len,
+               proto_tree_add_text(tree, NullTVB, offset, len,
                    "Diagnostics: %s",
                    bytes_to_str(&pd[offset], len));
        }
@@ -1296,7 +1296,7 @@ dissect_q2931_call_state_ie(const u_char *pd, int offset, int len,
        if (len == 0)
                return;
        octet = pd[offset];
-       proto_tree_add_text(tree, offset, 1,
+       proto_tree_add_text(tree, NullTVB, offset, 1,
            "Call state: %s",
            val_to_str(octet & 0x3F, q2931_call_state_vals,
              "Unknown (0x%02X)"));
@@ -1353,12 +1353,12 @@ dissect_q2931_number_ie(const u_char *pd, int offset, int len,
        if (len == 0)
                return;
        octet = pd[offset];
-       proto_tree_add_text(tree, offset, 1,
+       proto_tree_add_text(tree, NullTVB, offset, 1,
            "Type of number: %s",
            val_to_str(octet & 0x70, q2931_number_type_vals,
              "Unknown (0x%02X)"));
        numbering_plan = octet & 0x0F;
-       proto_tree_add_text(tree, offset, 1,
+       proto_tree_add_text(tree, NullTVB, offset, 1,
            "Numbering plan: %s",
            val_to_str(numbering_plan, q2931_numbering_plan_vals,
              "Unknown (0x%02X)"));
@@ -1369,11 +1369,11 @@ dissect_q2931_number_ie(const u_char *pd, int offset, int len,
                if (len == 0)
                        return;
                octet = pd[offset];
-               proto_tree_add_text(tree, offset, 1,
+               proto_tree_add_text(tree, NullTVB, offset, 1,
                    "Presentation indicator: %s",
                    val_to_str(octet & 0x60, q2931_presentation_indicator_vals,
                      "Unknown (0x%X)"));
-               proto_tree_add_text(tree, offset, 1,
+               proto_tree_add_text(tree, NullTVB, offset, 1,
                    "Screening indicator: %s",
                    val_to_str(octet & 0x03, q2931_screening_indicator_vals,
                      "Unknown (0x%X)"));
@@ -1386,24 +1386,24 @@ dissect_q2931_number_ie(const u_char *pd, int offset, int len,
        switch (numbering_plan) {
 
        case Q2931_ISDN_NUMBERING:
-               proto_tree_add_text(tree, offset, len, "Number: %.*s",
+               proto_tree_add_text(tree, NullTVB, offset, len, "Number: %.*s",
                    len, &pd[offset]);
                break;
 
        case Q2931_NSAP_ADDRESSING:
                if (len < 20) {
-                       proto_tree_add_text(tree, offset, len,
+                       proto_tree_add_text(tree, NullTVB, offset, len,
                            "Number (too short): %s",
                            bytes_to_str(&pd[offset], len));
                        return;
                }
-               ti = proto_tree_add_text(tree, offset, len, "Number");
+               ti = proto_tree_add_text(tree, NullTVB, offset, len, "Number");
                nsap_tree = proto_item_add_subtree(ti, ett_q2931_nsap);
                dissect_atm_nsap(pd, offset, len, nsap_tree);
                break;
 
        default:
-               proto_tree_add_text(tree, offset, len, "Number: %s",
+               proto_tree_add_text(tree, NullTVB, offset, len, "Number: %s",
                    bytes_to_str(&pd[offset], len));
                break;
        }
@@ -1434,11 +1434,11 @@ dissect_q2931_party_subaddr_ie(const u_char *pd, int offset, int len,
        if (len == 0)
                return;
        octet = pd[offset];
-       proto_tree_add_text(tree, offset, 1,
+       proto_tree_add_text(tree, NullTVB, offset, 1,
            "Type of subaddress: %s",
            val_to_str(octet & 0x70, q2931_subaddress_type_vals,
              "Unknown (0x%02X)"));
-       proto_tree_add_text(tree, offset, 1,
+       proto_tree_add_text(tree, NullTVB, offset, 1,
            "Odd/even indicator: %s",
            val_to_str(octet & 0x10, q2931_odd_even_indicator_vals,
              NULL));
@@ -1447,7 +1447,7 @@ dissect_q2931_party_subaddr_ie(const u_char *pd, int offset, int len,
 
        if (len == 0)
                return;
-       proto_tree_add_text(tree, offset, len, "Subaddress: %s",
+       proto_tree_add_text(tree, NullTVB, offset, len, "Subaddress: %s",
            bytes_to_str(&pd[offset], len));
 }
 
@@ -1476,11 +1476,11 @@ dissect_q2931_connection_identifier_ie(const u_char *pd, int offset, int len,
        if (len == 0)
                return;
        octet = pd[offset];
-       proto_tree_add_text(tree, offset, 1,
+       proto_tree_add_text(tree, NullTVB, offset, 1,
            "VP-associated signalling: %s",
            val_to_str(octet & 0x18, q2931_vp_associated_signalling_vals,
              "Unknown (0x%02X)"));
-       proto_tree_add_text(tree, offset, 1,
+       proto_tree_add_text(tree, NullTVB, offset, 1,
            "Preferred/exclusive: %s",
            val_to_str(octet & 0x07, q2931_preferred_exclusive_vals,
              "Unknown (0x%02X)"));
@@ -1489,14 +1489,14 @@ dissect_q2931_connection_identifier_ie(const u_char *pd, int offset, int len,
 
        if (len < 2)
                return;
-       proto_tree_add_text(tree, offset, 2, "VPCI: %u",
+       proto_tree_add_text(tree, NullTVB, offset, 2, "VPCI: %u",
            pntohs(&pd[offset]));
        offset += 2;
        len -= 2;
 
        if (len < 2)
                return;
-       proto_tree_add_text(tree, offset, 2, "VCI: %u",
+       proto_tree_add_text(tree, NullTVB, offset, 2, "VCI: %u",
            pntohs(&pd[offset]));
 }
 
@@ -1516,23 +1516,23 @@ dissect_q2931_e2e_transit_delay_ie(const u_char *pd, int offset, int len,
                switch (identifier) {
 
                case 0x01:      /* Cumulative transit delay identifier */
-                       proto_tree_add_text(tree, offset, 3,
+                       proto_tree_add_text(tree, NullTVB, offset, 3,
                            "Cumulative transit delay: %u ms", value);
                        break;
 
                case 0x03:      /* Maximum transit delay identifier */
                        if (value == 0xFFFF) {
-                               proto_tree_add_text(tree, offset, 3,
+                               proto_tree_add_text(tree, NullTVB, offset, 3,
                                    "Any end-to-end transit delay value acceptable");
                        } else {
-                               proto_tree_add_text(tree, offset, 3,
+                               proto_tree_add_text(tree, NullTVB, offset, 3,
                                    "Maximum end-to-end transit delay: %u ms",
                                    value);
                        }
                        break;
 
                default:        /* Unknown transit delay identifier */
-                       proto_tree_add_text(tree, offset, 1,
+                       proto_tree_add_text(tree, NullTVB, offset, 1,
                            "Unknown transit delay identifier (0x%02X)",
                            identifier);
                        return; /* give up */
@@ -1557,7 +1557,7 @@ dissect_q2931_qos_parameter_ie(const u_char *pd, int offset, int len,
        if (len == 0)
                return;
        octet = pd[offset];
-       proto_tree_add_text(tree, offset, 1,
+       proto_tree_add_text(tree, NullTVB, offset, 1,
            "QOS class forward: %s",
            val_to_str(octet, q2931_qos_parameter_vals,
              "Unknown (0x%02X)"));
@@ -1567,7 +1567,7 @@ dissect_q2931_qos_parameter_ie(const u_char *pd, int offset, int len,
        if (len == 0)
                return;
        octet = pd[offset];
-       proto_tree_add_text(tree, offset, 1,
+       proto_tree_add_text(tree, NullTVB, offset, 1,
            "QOS class backward: %s",
            val_to_str(octet, q2931_qos_parameter_vals,
              "Unknown (0x%02X)"));
@@ -1590,7 +1590,7 @@ dissect_q2931_bband_rpt_indicator(const u_char *pd, int offset, int len,
        if (len == 0)
                return;
        octet = pd[offset];
-       proto_tree_add_text(tree, offset, 1,
+       proto_tree_add_text(tree, NullTVB, offset, 1,
            "Broadband repeat indicator: %s",
            val_to_str(octet & 0x0F, q2931_bband_rpt_indicator_vals,
              "Unknown (0x%02X)"));
@@ -1615,7 +1615,7 @@ dissect_q2931_restart_indicator(const u_char *pd, int offset, int len,
        if (len == 0)
                return;
        octet = pd[offset];
-       proto_tree_add_text(tree, offset, 1,
+       proto_tree_add_text(tree, NullTVB, offset, 1,
            "Restart indicator: %s",
            val_to_str(octet & 0x07, q2931_class_vals,
              "Unknown (0x%02X)"));
@@ -1635,14 +1635,14 @@ dissect_q2931_bband_sending_compl_ie(const u_char *pd, int offset, int len,
                switch (identifier) {
 
                case 0xA1:      /* Sending complete indication */
-                       proto_tree_add_text(tree, offset, 1,
+                       proto_tree_add_text(tree, NullTVB, offset, 1,
                            "Broadband sending complete indication");
                        offset += 1;
                        len -= 1;
                        break;
 
                default:        /* unknown broadband sending complete element */
-                       proto_tree_add_text(tree, offset, 1,
+                       proto_tree_add_text(tree, NullTVB, offset, 1,
                            "Unknown broadband sending complete element (0x%02X)",
                            identifier);
                        return; /* give up */
@@ -1676,11 +1676,11 @@ dissect_q2931_transit_network_sel_ie(const u_char *pd, int offset, int len,
        if (len == 0)
                return;
        octet = pd[offset];
-       proto_tree_add_text(tree, offset, 1,
+       proto_tree_add_text(tree, NullTVB, offset, 1,
            "Type of network identification: %s",
            val_to_str(octet & 0x70, q2931_netid_type_vals,
              "Unknown (0x%02X)"));
-       proto_tree_add_text(tree, offset, 1,
+       proto_tree_add_text(tree, NullTVB, offset, 1,
            "Network identification plan: %s",
            val_to_str(octet & 0x0F, q2931_netid_plan_vals,
              "Unknown (0x%02X)"));
@@ -1689,7 +1689,7 @@ dissect_q2931_transit_network_sel_ie(const u_char *pd, int offset, int len,
 
        if (len == 0)
                return;
-       proto_tree_add_text(tree, offset, len,
+       proto_tree_add_text(tree, NullTVB, offset, len,
            "Network identification: %.*s", len, &pd[offset]);
 }
 
@@ -1731,14 +1731,14 @@ dissect_q2931_oam_traffic_descriptor_ie(const u_char *pd, int offset, int len,
        if (len == 0)
                return;
        octet = pd[offset];
-       proto_tree_add_text(tree, offset, 1,
+       proto_tree_add_text(tree, NullTVB, offset, 1,
            "Shaping indicator: %s",
            val_to_str(octet & 0x60, q2931_shaping_indicator_vals,
              "Unknown (0x%02X)"));
-       proto_tree_add_text(tree, offset, 1,
+       proto_tree_add_text(tree, NullTVB, offset, 1,
            "Use of end-to-end OAM F5 flow is %s",
            (octet & 0x10) ? "mandatory" : "optional");
-       proto_tree_add_text(tree, offset, 1,
+       proto_tree_add_text(tree, NullTVB, offset, 1,
            "User-Network fault management indicator: %s",
            val_to_str(octet & 0x07, q2931_user_net_fault_mgmt_vals,
              "Unknown (0x%02X)"));
@@ -1748,11 +1748,11 @@ dissect_q2931_oam_traffic_descriptor_ie(const u_char *pd, int offset, int len,
        if (len == 0)
                return;
        octet = pd[offset];
-       proto_tree_add_text(tree, offset, 1,
+       proto_tree_add_text(tree, NullTVB, offset, 1,
            "Forward end-to-end OAM F5 flow indicator: %s",
            val_to_str(octet & 0x70, q2931_fwd_e2e_oam_f5_flow_indicator_vals,
              "Unknown (0x%02X)"));
-       proto_tree_add_text(tree, offset, 1,
+       proto_tree_add_text(tree, NullTVB, offset, 1,
            "Backward end-to-end OAM F5 flow indicator: %s",
            val_to_str(octet & 0x07, q2931_bwd_e2e_oam_f5_flow_indicator_vals,
              "Unknown (0x%02X)"));
@@ -1776,7 +1776,7 @@ dissect_q2931_endpoint_reference_ie(const u_char *pd, int offset, int len,
        if (len == 0)
                return;
        octet = pd[offset];
-       proto_tree_add_text(tree, offset, 1,
+       proto_tree_add_text(tree, NullTVB, offset, 1,
            "Endpoint reference type: %s",
            val_to_str(octet, q2931_endpoint_reference_type_vals,
              "Unknown (0x%02X)"));
@@ -1786,11 +1786,11 @@ dissect_q2931_endpoint_reference_ie(const u_char *pd, int offset, int len,
        if (len < 2)
                return;
        value = pntohs(&pd[offset]);
-       proto_tree_add_text(tree, offset, 2,
+       proto_tree_add_text(tree, NullTVB, offset, 2,
            "Endpoint reference flag: %s",
            (value & 0x8000) ? "Message sent to side that originates the endpoint reference" :
                               "Message sent from side that originates the endpoint reference");
-       proto_tree_add_text(tree, offset, 2,
+       proto_tree_add_text(tree, NullTVB, offset, 2,
            "Endpoint reference identifier value: %u",
            value & 0x7FFF);
 }
@@ -1817,7 +1817,7 @@ dissect_q2931_endpoint_state_ie(const u_char *pd, int offset, int len,
        if (len == 0)
                return;
        octet = pd[offset];
-       proto_tree_add_text(tree, offset, 1,
+       proto_tree_add_text(tree, NullTVB, offset, 1,
            "Endpoint reference party-state: %s",
            val_to_str(octet & 0x3F, q2931_endpoint_reference_party_state_vals,
              "Unknown (0x%02X)"));
@@ -1935,34 +1935,34 @@ dissect_q2931_ie(const u_char *pd, int offset, int len, proto_tree *tree,
        proto_tree      *ie_tree;
        proto_tree      *ie_ext_tree;
 
-       ti = proto_tree_add_text(tree, offset, 1+1+2+len, "%s",
+       ti = proto_tree_add_text(tree, NullTVB, offset, 1+1+2+len, "%s",
            val_to_str(info_element, q2931_info_element_vals,
              "Unknown information element (0x%02X)"));
        ie_tree = proto_item_add_subtree(ti, ett_q2931_ie);
-       proto_tree_add_text(ie_tree, offset, 1, "Information element: %s",
+       proto_tree_add_text(ie_tree, NullTVB, offset, 1, "Information element: %s",
            val_to_str(info_element, q2931_info_element_vals,
              "Unknown (0x%02X)"));
-       ti = proto_tree_add_text(ie_tree, offset + 1, 1,
+       ti = proto_tree_add_text(ie_tree, NullTVB, offset + 1, 1,
            "Information element extension: 0x%02x",
            info_element_ext);
        ie_ext_tree = proto_item_add_subtree(ti, ett_q2931_ie_ext);
-       proto_tree_add_text(ie_ext_tree, offset + 1, 1,
+       proto_tree_add_text(ie_ext_tree, NullTVB, offset + 1, 1,
            decode_enumerated_bitfield(info_element_ext,
                Q2931_IE_COMPAT_CODING_STD, 8,
                coding_std_vals, "Coding standard: %s"));
-       proto_tree_add_text(ie_ext_tree, offset + 1, 1,
+       proto_tree_add_text(ie_ext_tree, NullTVB, offset + 1, 1,
            decode_boolean_bitfield(info_element_ext,
            Q2931_IE_COMPAT_FOLLOW_INST, 8,
            "Follow explicit error handling instructions",
            "Regular error handling procedures apply"));
        if (info_element_ext & Q2931_IE_COMPAT_FOLLOW_INST) {
-               proto_tree_add_text(ie_ext_tree, offset + 1, 1,
+               proto_tree_add_text(ie_ext_tree, NullTVB, offset + 1, 1,
                    decode_enumerated_bitfield(info_element_ext,
                        Q2931_IE_COMPAT_ACTION_IND, 8,
                        ie_action_ind_vals,
                        "Action indicator: %s"));
        }
-       proto_tree_add_text(ie_tree, offset + 2, 2, "Length: %u", len);
+       proto_tree_add_text(ie_tree, NullTVB, offset + 2, 2, "Length: %u", len);
 
        if ((info_element_ext & Q2931_IE_COMPAT_CODING_STD)
            == Q2931_ITU_STANDARDIZED_CODING) {
@@ -1973,7 +1973,7 @@ dissect_q2931_ie(const u_char *pd, int offset, int len, proto_tree *tree,
                 * We don't know how it's encoded, so just
                 * dump it as data and be done with it.
                 */
-               proto_tree_add_text(ie_tree, offset + 4,  len,
+               proto_tree_add_text(ie_tree, NullTVB, offset + 4,  len,
                    "Data: %s", bytes_to_str(&pd[offset + 4], len));
        }
 }
@@ -1999,22 +1999,22 @@ dissect_q2931(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
                col_add_str(fd, COL_PROTOCOL, "Q.2931");
 
        if (tree) {
-               ti = proto_tree_add_item(tree, proto_q2931, offset,
+               ti = proto_tree_add_item(tree, proto_q2931, NullTVB, offset,
                    END_OF_FRAME, NULL);
                q2931_tree = proto_item_add_subtree(ti, ett_q2931);
 
-               proto_tree_add_item(q2931_tree, hf_q2931_discriminator, offset, 1, pd[offset]);
+               proto_tree_add_item(q2931_tree, hf_q2931_discriminator, NullTVB, offset, 1, pd[offset]);
        }
        offset += 1;
        call_ref_len = pd[offset] & 0xF;        /* XXX - do as a bit field? */
        if (q2931_tree != NULL)
-               proto_tree_add_item(q2931_tree, hf_q2931_call_ref_len, offset, 1, call_ref_len);
+               proto_tree_add_item(q2931_tree, hf_q2931_call_ref_len, NullTVB, offset, 1, call_ref_len);
        offset += 1;
        if (call_ref_len != 0) {
                /* XXX - split this into flag and value */
                memcpy(call_ref, &pd[offset], call_ref_len);
                if (q2931_tree != NULL)
-                       proto_tree_add_item(q2931_tree, hf_q2931_call_ref, offset, call_ref_len, call_ref);
+                       proto_tree_add_item(q2931_tree, hf_q2931_call_ref, NullTVB, offset, call_ref_len, call_ref);
                offset += call_ref_len;
        }
        message_type = pd[offset];
@@ -2024,18 +2024,18 @@ dissect_q2931(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
                      "Unknown message type (0x%02X)"));
        }
        if (q2931_tree != NULL)
-               proto_tree_add_item(q2931_tree, hf_q2931_message_type, offset, 1, message_type);
+               proto_tree_add_item(q2931_tree, hf_q2931_message_type, NullTVB, offset, 1, message_type);
        offset += 1;
 
        message_type_ext = pd[offset];
        if (q2931_tree != NULL) {
-               ti = proto_tree_add_item(q2931_tree, hf_q2931_message_type_ext,
+               ti = proto_tree_add_item(q2931_tree, hf_q2931_message_type_ext, NullTVB,
                    offset, 1, message_type_ext);
                ext_tree = proto_item_add_subtree(ti, ett_q2931_ext);
-               proto_tree_add_item(ext_tree, hf_q2931_message_flag,
+               proto_tree_add_item(ext_tree, hf_q2931_message_flag, NullTVB,
                    offset, 1, message_type_ext);
                if (message_type_ext & Q2931_MSG_TYPE_EXT_FOLLOW_INST) {
-                       proto_tree_add_item(ext_tree, hf_q2931_message_action_indicator,
+                       proto_tree_add_item(ext_tree, hf_q2931_message_action_indicator, NullTVB,
                            offset, 1, message_type_ext);
                }
        }
@@ -2043,7 +2043,7 @@ dissect_q2931(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
 
        message_len = pntohs(&pd[offset]);
        if (q2931_tree != NULL)
-               proto_tree_add_item(q2931_tree, hf_q2931_message_len, offset, 2, message_len);
+               proto_tree_add_item(q2931_tree, hf_q2931_message_len, NullTVB, offset, 2, message_len);
        offset += 2;
 
        /*