aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-zbee-zcl-se.c
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2017-11-13 08:25:49 -0500
committerAnders Broman <a.broman58@gmail.com>2017-11-22 09:10:05 +0000
commit2f2c2b06e2f43c2a18bf1033253ee07c4b2b427e (patch)
treefb2c90e2a0ea020cd6994eb67f2a70abc2f73b37 /epan/dissectors/packet-zbee-zcl-se.c
parent8d5726dccc6851aa99707f4ff3cf9d11128cd822 (diff)
Add Zigbee encoding, ENC_ZIGBEE
Add the "special handling" of length = 0xFF for single byte or 0xFFFF for uint16 value means size of field to follow is 0. Ping-Bug: 14138 Change-Id: I0baa40f63152b9420a6569ca6cc5eba638fbc790 Reviewed-on: https://code.wireshark.org/review/24428 Petri-Dish: Michael Mann <mmann78@netscape.net> Tested-by: Petri Dish Buildbot Reviewed-by: Craig Jackson <cejackson51@gmail.com> Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-zbee-zcl-se.c')
-rw-r--r--epan/dissectors/packet-zbee-zcl-se.c104
1 files changed, 19 insertions, 85 deletions
diff --git a/epan/dissectors/packet-zbee-zcl-se.c b/epan/dissectors/packet-zbee-zcl-se.c
index 8298b1744b..2cf59dc1f2 100644
--- a/epan/dissectors/packet-zbee-zcl-se.c
+++ b/epan/dissectors/packet-zbee-zcl-se.c
@@ -50,41 +50,6 @@ static const value_string zbee_zcl_se_reporting_status_names[] = {
{ 0, NULL }
};
-/**
- *Dissect an octet string by adding a subtree showing length and octets
- *
- *@param tvb pointer to buffer containing raw packet.
- *@param tree pointer to data tree Wireshark uses to display packet.
- *@param offset pointer to buffer offset
- *@param idx one of the ett_ array elements registered with proto_register_subtree_array()
- *@param hfindex_len length field
- *@param hfindex_data data field
-*/
-static void dissect_zcl_octet_string(tvbuff_t *tvb, proto_tree *tree, guint *offset,
- gint idx, int hfindex_len, int hfindex_data)
-{
- guint8 octet_len;
- proto_tree* subtree;
-
- /* Add subtree */
- subtree = proto_tree_add_subtree(tree, tvb, *offset, 0, idx, NULL, proto_registrar_get_name(hfindex_data));
-
- /* Length */
- octet_len = tvb_get_guint8(tvb, *offset);
- if (octet_len == ZBEE_ZCL_INVALID_STR_LENGTH) {
- octet_len = 0;
- }
- proto_tree_add_item(subtree, hfindex_len, tvb, *offset, 1, ENC_NA);
- *offset += 1;
-
- /* Data */
- proto_tree_add_item(subtree, hfindex_data, tvb, *offset, octet_len, ENC_NA);
- *offset += octet_len;
-
- /* Set length of subtree */
- proto_item_set_end(proto_tree_get_parent(subtree), tvb, *offset);
-}
-
/*************************/
/* Global Variables */
/*************************/
@@ -3673,7 +3638,6 @@ static int hf_zbee_zcl_pp_emergency_credit_setup_start_time = -1;
static int hf_zbee_zcl_pp_emergency_credit_setup_emergency_credit_limit = -1;
static int hf_zbee_zcl_pp_emergency_credit_setup_emergency_credit_threshold = -1;
static int hf_zbee_zcl_pp_consumer_top_up_originating_device = -1;
-static int hf_zbee_zcl_pp_consumer_top_up_top_up_code_len = -1;
static int hf_zbee_zcl_pp_consumer_top_up_top_up_code = -1;
static int hf_zbee_zcl_pp_credit_adjustment_issuer_event_id = -1;
static int hf_zbee_zcl_pp_credit_adjustment_start_time = -1;
@@ -3721,7 +3685,6 @@ static int hf_zbee_zcl_pp_consumer_top_up_response_source_of_top_up = -1;
static int hf_zbee_zcl_pp_consumer_top_up_response_credit_remaining = -1;
static int hf_zbee_zcl_pp_publish_top_up_log_command_index = -1;
static int hf_zbee_zcl_pp_publish_top_up_log_total_number_of_commands = -1;
-static int hf_zbee_zcl_pp_publish_top_up_log_top_up_code_len = -1;
static int hf_zbee_zcl_pp_publish_top_up_log_top_up_code = -1;
static int hf_zbee_zcl_pp_publish_top_up_log_top_up_amount = -1;
static int hf_zbee_zcl_pp_publish_top_up_log_top_up_time = -1;
@@ -3733,7 +3696,7 @@ static int hf_zbee_zcl_pp_publish_debt_log_debt_type = -1;
static int hf_zbee_zcl_pp_publish_debt_log_outstanding_debt = -1;
/* Initialize the subtree pointers */
-#define ZBEE_ZCL_SE_PP_NUM_INDIVIDUAL_ETT 3
+#define ZBEE_ZCL_SE_PP_NUM_INDIVIDUAL_ETT 1
#define ZBEE_ZCL_SE_PP_NUM_PUBLISH_TOP_UP_LOG_ETT 30
#define ZBEE_ZCL_SE_PP_NUM_PUBLISH_DEBT_LOG_ETT 30
#define ZBEE_ZCL_SE_PP_NUM_TOTAL_ETT (ZBEE_ZCL_SE_PP_NUM_INDIVIDUAL_ETT + \
@@ -3741,8 +3704,6 @@ static int hf_zbee_zcl_pp_publish_debt_log_outstanding_debt = -1;
ZBEE_ZCL_SE_PP_NUM_PUBLISH_DEBT_LOG_ETT)
static gint ett_zbee_zcl_pp = -1;
-static gint ett_zbee_zcl_pp_consumer_top_up_top_up_code = -1;
-static gint ett_zbee_zcl_pp_publish_top_up_log_top_up_code = -1;
static gint ett_zbee_zcl_pp_publish_top_up_entry[ZBEE_ZCL_SE_PP_NUM_PUBLISH_TOP_UP_LOG_ETT];
static gint ett_zbee_zcl_pp_publish_debt_log_entry[ZBEE_ZCL_SE_PP_NUM_PUBLISH_DEBT_LOG_ETT];
@@ -4035,15 +3996,15 @@ dissect_zcl_pp_emergency_credit_setup(tvbuff_t *tvb, proto_tree *tree, guint *of
static void
dissect_zcl_pp_consumer_top_up(tvbuff_t *tvb, proto_tree *tree, guint *offset)
{
+ int length;
+
/* Originating Device */
proto_tree_add_item(tree, hf_zbee_zcl_pp_consumer_top_up_originating_device, tvb, *offset, 1, ENC_NA);
*offset += 1;
/* TopUp Code */
- dissect_zcl_octet_string(tvb, tree, offset,
- ett_zbee_zcl_pp_consumer_top_up_top_up_code,
- hf_zbee_zcl_pp_consumer_top_up_top_up_code_len,
- hf_zbee_zcl_pp_consumer_top_up_top_up_code);
+ proto_tree_add_item_ret_length(tree, hf_zbee_zcl_pp_consumer_top_up_top_up_code, tvb, *offset, 1, ENC_NA|ENC_ZIGBEE, &length);
+ *offset += length;
} /*dissect_zcl_pp_consumer_top_up*/
/**
@@ -4391,6 +4352,7 @@ static void
dissect_zcl_pp_publish_top_up_log(tvbuff_t *tvb, proto_tree *tree, guint *offset)
{
guint i = 0;
+ gint length;
nstime_t top_up_time;
proto_tree *sub_tree;
@@ -4409,10 +4371,8 @@ dissect_zcl_pp_publish_top_up_log(tvbuff_t *tvb, proto_tree *tree, guint *offset
i++;
/* Top Up Code */
- dissect_zcl_octet_string(tvb, sub_tree, offset,
- ett_zbee_zcl_pp_publish_top_up_log_top_up_code,
- hf_zbee_zcl_pp_publish_top_up_log_top_up_code_len,
- hf_zbee_zcl_pp_publish_top_up_log_top_up_code);
+ proto_tree_add_item_ret_length(sub_tree, hf_zbee_zcl_pp_publish_top_up_log_top_up_code, tvb, *offset, 1, ENC_NA|ENC_ZIGBEE, &length);
+ *offset += length;
/* Top Up Amount */
proto_tree_add_item(sub_tree, hf_zbee_zcl_pp_publish_top_up_log_top_up_amount, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
@@ -4570,12 +4530,8 @@ proto_register_zbee_zcl_pp(void)
{ "Originating Device", "zbee_zcl_se.pp.consumer_top_up.originating_device", FT_UINT8, BASE_DEC, NULL,
0x00, NULL, HFILL } },
- { &hf_zbee_zcl_pp_consumer_top_up_top_up_code_len,
- { "Length", "zbee_zcl_se.pp.consumer_top_up.top_up_code_len", FT_UINT8, BASE_DEC, NULL,
- 0x00, NULL, HFILL } },
-
{ &hf_zbee_zcl_pp_consumer_top_up_top_up_code,
- { "TopUp Code", "zbee_zcl_se.pp.consumer_top_up.top_up_code", FT_BYTES, SEP_COLON, NULL,
+ { "TopUp Code", "zbee_zcl_se.pp.consumer_top_up.top_up_code", FT_UINT_BYTES, SEP_COLON, NULL,
0x00, NULL, HFILL } },
{ &hf_zbee_zcl_pp_credit_adjustment_issuer_event_id,
@@ -4762,12 +4718,8 @@ proto_register_zbee_zcl_pp(void)
{ "Total Number of Commands", "zbee_zcl_se.pp.publish_top_up_log.total_number_of_commands", FT_UINT8, BASE_DEC, NULL,
0x00, NULL, HFILL } },
- { &hf_zbee_zcl_pp_publish_top_up_log_top_up_code_len,
- { "Length", "zbee_zcl_se.pp.publish_top_up_log.top_up_code_len", FT_UINT8, BASE_DEC, NULL,
- 0x00, NULL, HFILL } },
-
{ &hf_zbee_zcl_pp_publish_top_up_log_top_up_code,
- { "TopUp Code", "zbee_zcl_se.pp.publish_top_up_log.top_up_code", FT_BYTES, SEP_COLON, NULL,
+ { "TopUp Code", "zbee_zcl_se.pp.publish_top_up_log.top_up_code", FT_UINT_BYTES, SEP_COLON, NULL,
0x00, NULL, HFILL } },
{ &hf_zbee_zcl_pp_publish_top_up_log_top_up_amount,
@@ -4806,8 +4758,6 @@ proto_register_zbee_zcl_pp(void)
/* ZCL Prepayment subtrees */
gint *ett[ZBEE_ZCL_SE_PP_NUM_TOTAL_ETT];
ett[0] = &ett_zbee_zcl_pp;
- ett[1] = &ett_zbee_zcl_pp_consumer_top_up_top_up_code;
- ett[2] = &ett_zbee_zcl_pp_publish_top_up_log_top_up_code;
guint j = ZBEE_ZCL_SE_PP_NUM_INDIVIDUAL_ETT;
@@ -5729,7 +5679,6 @@ static int hf_zbee_zcl_events_publish_event_log_id = -1;
static int hf_zbee_zcl_events_publish_event_event_id = -1;
static int hf_zbee_zcl_events_publish_event_event_time = -1;
static int hf_zbee_zcl_events_publish_event_event_control = -1;
-static int hf_zbee_zcl_events_publish_event_event_data_len = -1;
static int hf_zbee_zcl_events_publish_event_event_data = -1;
static int hf_zbee_zcl_events_publish_event_log_total_number_of_matching_events = -1;
static int hf_zbee_zcl_events_publish_event_log_command_index = -1;
@@ -5738,18 +5687,15 @@ static int hf_zbee_zcl_events_publish_event_log_number_of_events_log_payload_con
static int hf_zbee_zcl_events_publish_event_log_log_id = -1;
static int hf_zbee_zcl_events_publish_event_log_event_id = -1;
static int hf_zbee_zcl_events_publish_event_log_event_time = -1;
-static int hf_zbee_zcl_events_publish_event_log_event_data_len = -1;
static int hf_zbee_zcl_events_publish_event_log_event_data = -1;
static int hf_zbee_zcl_events_clear_event_log_response_cleared_event_logs = -1;
/* Initialize the subtree pointers */
-#define ZBEE_ZCL_SE_EVENTS_NUM_INDIVIDUAL_ETT 3
+#define ZBEE_ZCL_SE_EVENTS_NUM_INDIVIDUAL_ETT 1
#define ZBEE_ZCL_SE_EVENTS_NUM_PUBLISH_EVENT_LOG_ETT 100 // The Great Britain Companion Specification (GBCS) allows up to 100 even though ZigBee only allows 15
#define ZBEE_ZCL_SE_EVENTS_NUM_TOTAL_ETT (ZBEE_ZCL_SE_EVENTS_NUM_INDIVIDUAL_ETT + ZBEE_ZCL_SE_EVENTS_NUM_PUBLISH_EVENT_LOG_ETT)
static gint ett_zbee_zcl_events = -1;
-static gint ett_zbee_zcl_events_publish_event_event_data = -1;
-static gint ett_zbee_zcl_events_publish_event_log_event_data = -1;
static gint ett_zbee_zcl_events_publish_event_log_entry[ZBEE_ZCL_SE_EVENTS_NUM_PUBLISH_EVENT_LOG_ETT];
/*************************/
@@ -5940,6 +5886,7 @@ static void
dissect_zcl_events_publish_event(tvbuff_t *tvb, proto_tree *tree, guint *offset)
{
nstime_t event_time;
+ gint length;
/* Log ID */
proto_tree_add_item(tree, hf_zbee_zcl_events_publish_event_log_id, tvb, *offset, 1, ENC_NA);
@@ -5960,10 +5907,8 @@ dissect_zcl_events_publish_event(tvbuff_t *tvb, proto_tree *tree, guint *offset)
*offset += 1;
/* Event Data */
- dissect_zcl_octet_string(tvb, tree, offset,
- ett_zbee_zcl_events_publish_event_event_data,
- hf_zbee_zcl_events_publish_event_event_data_len,
- hf_zbee_zcl_events_publish_event_event_data);
+ proto_tree_add_item_ret_length(tree, hf_zbee_zcl_events_publish_event_event_data, tvb, *offset, 1, ENC_NA|ENC_ZIGBEE, &length);
+ *offset += length;
} /*dissect_zcl_events_publish_event*/
/**
@@ -5978,6 +5923,7 @@ dissect_zcl_events_publish_event_log(tvbuff_t *tvb, proto_tree *tree, guint *off
{
proto_tree* event_log_tree;
nstime_t event_time;
+ int length;
/* Total Number of Matching Events */
proto_tree_add_item(tree, hf_zbee_zcl_events_publish_event_log_total_number_of_matching_events, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
@@ -6015,10 +5961,8 @@ dissect_zcl_events_publish_event_log(tvbuff_t *tvb, proto_tree *tree, guint *off
*offset += 4;
/* Event Data */
- dissect_zcl_octet_string(tvb, event_log_tree, offset,
- ett_zbee_zcl_events_publish_event_log_event_data,
- hf_zbee_zcl_events_publish_event_log_event_data_len,
- hf_zbee_zcl_events_publish_event_log_event_data);
+ proto_tree_add_item_ret_length(event_log_tree, hf_zbee_zcl_events_publish_event_log_event_data, tvb, *offset, 1, ENC_NA|ENC_ZIGBEE, &length);
+ *offset += length;
/* Set length of subtree */
proto_item_set_end(proto_tree_get_parent(event_log_tree), tvb, *offset);
@@ -6109,12 +6053,8 @@ proto_register_zbee_zcl_events(void)
{ "Event Control", "zbee_zcl_se.events.publish_event.event_control", FT_UINT8, BASE_HEX, NULL,
0x00, NULL, HFILL } },
- { &hf_zbee_zcl_events_publish_event_event_data_len,
- { "Length", "zbee_zcl_se.events.publish_event.event_data_len", FT_UINT8, BASE_DEC, NULL,
- 0x00, NULL, HFILL } },
-
{ &hf_zbee_zcl_events_publish_event_event_data,
- { "Event Data", "zbee_zcl_se.events.publish_event.event_data", FT_BYTES, SEP_COLON, NULL,
+ { "Event Data", "zbee_zcl_se.events.publish_event.event_data", FT_UINT_BYTES, SEP_COLON, NULL,
0x00, NULL, HFILL } },
{ &hf_zbee_zcl_events_publish_event_log_total_number_of_matching_events,
@@ -6145,12 +6085,8 @@ proto_register_zbee_zcl_events(void)
{ "Event Time", "zbee_zcl_se.events.publish_event_log.event_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
0x00, NULL, HFILL } },
- { &hf_zbee_zcl_events_publish_event_log_event_data_len,
- { "Length", "zbee_zcl_se.events.publish_event_log.event_data_len", FT_UINT8, BASE_DEC, NULL,
- 0x00, NULL, HFILL } },
-
{ &hf_zbee_zcl_events_publish_event_log_event_data,
- { "Event Data", "zbee_zcl_se.events.publish_event_log.event_data", FT_BYTES, SEP_COLON, NULL,
+ { "Event Data", "zbee_zcl_se.events.publish_event_log.event_data", FT_UINT_BYTES, SEP_COLON, NULL,
0x00, NULL, HFILL } },
{ &hf_zbee_zcl_events_clear_event_log_response_cleared_event_logs,
@@ -6162,8 +6098,6 @@ proto_register_zbee_zcl_events(void)
/* ZCL Events subtrees */
gint *ett[ZBEE_ZCL_SE_EVENTS_NUM_TOTAL_ETT];
ett[0] = &ett_zbee_zcl_events;
- ett[1] = &ett_zbee_zcl_events_publish_event_event_data;
- ett[2] = &ett_zbee_zcl_events_publish_event_log_event_data;
guint j = ZBEE_ZCL_SE_EVENTS_NUM_INDIVIDUAL_ETT;