aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-dnp.c
diff options
context:
space:
mode:
authorPascal Quantin <pascal.quantin@gmail.com>2013-11-17 16:40:25 +0000
committerPascal Quantin <pascal.quantin@gmail.com>2013-11-17 16:40:25 +0000
commit1c73d047b363f083caa22c35b0142c803c3f77ac (patch)
treeadd8529a2b56ec63572e297a45b6500be94623cc /epan/dissectors/packet-dnp.c
parentd28beab7229a17d85d2e385d39831bfa32e44915 (diff)
From Chris Bontje via https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9442 :
DNP3 bug fix for analog data sign bit bandling svn path=/trunk/; revision=53399
Diffstat (limited to 'epan/dissectors/packet-dnp.c')
-rw-r--r--epan/dissectors/packet-dnp.c50
1 files changed, 26 insertions, 24 deletions
diff --git a/epan/dissectors/packet-dnp.c b/epan/dissectors/packet-dnp.c
index 97d72dfbf2..828af8b55e 100644
--- a/epan/dissectors/packet-dnp.c
+++ b/epan/dissectors/packet-dnp.c
@@ -1813,9 +1813,11 @@ dnp3_al_process_object(tvbuff_t *tvb, packet_info *pinfo, int offset,
if (!header_only || (AL_OBJQL_IDX_1OS <= al_objq_index && al_objq_index <= AL_OBJQL_IDX_4OS)) {
guint8 al_2bit, al_ptflags, al_ctlobj_count, al_bi_val, al_tcc_code, da_len;
- guint16 al_val16, al_ctlobj_stat;
+ gint16 al_val_int16;
+ guint16 al_val_uint16, al_ctlobj_stat;
guint16 al_relms, al_filename_offs, al_filename_len, al_file_ctrl_mode;
- guint32 al_val32, al_ctlobj_on, al_ctlobj_off, file_data_size;
+ gint32 al_val_int32;
+ guint32 al_val_uint32, al_ctlobj_on, al_ctlobj_off, file_data_size;
nstime_t al_reltime, al_abstime;
gboolean al_bit;
gfloat al_valflt;
@@ -2152,14 +2154,14 @@ dnp3_al_process_object(tvbuff_t *tvb, packet_info *pinfo, int offset,
switch (al_obj)
{
case AL_OBJ_AO_32OPB:
- al_val32 = tvb_get_letohl(tvb, data_pos);
- proto_item_append_text(point_item, ", Value: %u", al_val32);
+ al_val_int32 = tvb_get_letohl(tvb, data_pos);
+ proto_item_append_text(point_item, ", Value: %d", al_val_int32);
proto_tree_add_item(point_tree, hf_dnp3_al_anaout32, tvb, data_pos, 4, ENC_LITTLE_ENDIAN);
data_pos += 4;
break;
case AL_OBJ_AO_16OPB:
- al_val32 = tvb_get_letohs(tvb, data_pos);
- proto_item_append_text(point_item, ", Value: %u", al_val32);
+ al_val_int16 = tvb_get_letohs(tvb, data_pos);
+ proto_item_append_text(point_item, ", Value: %d", al_val_int16);
proto_tree_add_item(point_tree, hf_dnp3_al_anaout16, tvb, data_pos, 2, ENC_LITTLE_ENDIAN);
data_pos += 2;
break;
@@ -2268,8 +2270,8 @@ dnp3_al_process_object(tvbuff_t *tvb, packet_info *pinfo, int offset,
case AL_OBJ_FCTRC_32T:
case AL_OBJ_FDCTRC_32T:
- al_val32 = tvb_get_letohl(tvb, data_pos);
- proto_item_append_text(point_item, ", Count: %u", al_val32);
+ al_val_uint32 = tvb_get_letohl(tvb, data_pos);
+ proto_item_append_text(point_item, ", Count: %u", al_val_uint32);
proto_tree_add_item(point_tree, hf_dnp3_al_cnt32, tvb, data_pos, 4, ENC_LITTLE_ENDIAN);
data_pos += 4;
break;
@@ -2293,8 +2295,8 @@ dnp3_al_process_object(tvbuff_t *tvb, packet_info *pinfo, int offset,
case AL_OBJ_FCTRC_16T:
case AL_OBJ_FDCTRC_16T:
- al_val16 = tvb_get_letohs(tvb, data_pos);
- proto_item_append_text(point_item, ", Count: %u", al_val16);
+ al_val_uint16 = tvb_get_letohs(tvb, data_pos);
+ proto_item_append_text(point_item, ", Count: %u", al_val_uint16);
proto_tree_add_item(point_tree, hf_dnp3_al_cnt16, tvb, data_pos, 2, ENC_LITTLE_ENDIAN);
data_pos += 2;
break;
@@ -2376,8 +2378,8 @@ dnp3_al_process_object(tvbuff_t *tvb, packet_info *pinfo, int offset,
case AL_OBJ_AIC_32T:
case AL_OBJ_AIDB_32:
- al_val32 = tvb_get_letohl(tvb, data_pos);
- proto_item_append_text(point_item, ", Value: %u", al_val32);
+ al_val_int32 = tvb_get_letohl(tvb, data_pos);
+ proto_item_append_text(point_item, ", Value: %d", al_val_int32);
proto_tree_add_item(point_tree, hf_dnp3_al_ana32, tvb, data_pos, 4, ENC_LITTLE_ENDIAN);
data_pos += 4;
break;
@@ -2388,8 +2390,8 @@ dnp3_al_process_object(tvbuff_t *tvb, packet_info *pinfo, int offset,
case AL_OBJ_AIC_16T:
case AL_OBJ_AIDB_16:
- al_val16 = tvb_get_letohs(tvb, data_pos);
- proto_item_append_text(point_item, ", Value: %u", al_val16);
+ al_val_int16 = tvb_get_letohs(tvb, data_pos);
+ proto_item_append_text(point_item, ", Value: %d", al_val_int16);
proto_tree_add_item(point_tree, hf_dnp3_al_ana16, tvb, data_pos, 2, ENC_LITTLE_ENDIAN);
data_pos += 2;
break;
@@ -2467,8 +2469,8 @@ dnp3_al_process_object(tvbuff_t *tvb, packet_info *pinfo, int offset,
case AL_OBJ_AOC_32NT: /* 32-Bit Analog Output Event w/o Time (Obj:42, Var:01) */
case AL_OBJ_AOC_32T: /* 32-Bit Analog Output Event with Time (Obj:42, Var:03) */
- al_val32 = tvb_get_letohl(tvb, data_pos);
- proto_item_append_text(point_item, ", Value: %u", al_val32);
+ al_val_int32 = tvb_get_letohl(tvb, data_pos);
+ proto_item_append_text(point_item, ", Value: %d", al_val_int32);
proto_tree_add_item(point_tree, hf_dnp3_al_anaout32, tvb, data_pos, 4, ENC_LITTLE_ENDIAN);
data_pos += 4;
break;
@@ -2477,8 +2479,8 @@ dnp3_al_process_object(tvbuff_t *tvb, packet_info *pinfo, int offset,
case AL_OBJ_AOC_16NT: /* 16-Bit Analog Output Event w/o Time (Obj:42, Var:02) */
case AL_OBJ_AOC_16T: /* 16-Bit Analog Output Event with Time (Obj:42, Var:04) */
- al_val16 = tvb_get_letohs(tvb, data_pos);
- proto_item_append_text(point_item, ", Value: %u", al_val16);
+ al_val_int16 = tvb_get_letohs(tvb, data_pos);
+ proto_item_append_text(point_item, ", Value: %d", al_val_int16);
proto_tree_add_item(point_tree, hf_dnp3_al_anaout16, tvb, data_pos, 2, ENC_LITTLE_ENDIAN);
data_pos += 2;
break;
@@ -2542,8 +2544,8 @@ dnp3_al_process_object(tvbuff_t *tvb, packet_info *pinfo, int offset,
case AL_OBJ_TDELAYF: /* Time Delay - Fine (Obj:52, Var:02) */
- al_val16 = tvb_get_letohs(tvb, data_pos);
- proto_tree_add_text(object_tree, tvb, data_pos, 2, "Time Delay: %u ms", al_val16);
+ al_val_uint16 = tvb_get_letohs(tvb, data_pos);
+ proto_tree_add_text(object_tree, tvb, data_pos, 2, "Time Delay: %u ms", al_val_uint16);
data_pos += 2;
proto_item_set_len(point_item, data_pos - offset);
@@ -3863,13 +3865,13 @@ proto_register_dnp3(void)
{ &hf_dnp3_al_ana16,
{ "Value (16 bit)", "dnp3.al.ana",
- FT_UINT16, BASE_DEC, NULL, 0x0,
+ FT_INT16, BASE_DEC, NULL, 0x0,
"Analog Value (16 bit)", HFILL }
},
{ &hf_dnp3_al_ana32,
{ "Value (32 bit)", "dnp3.al.ana",
- FT_UINT32, BASE_DEC, NULL, 0x0,
+ FT_INT32, BASE_DEC, NULL, 0x0,
"Analog Value (32 bit)", HFILL }
},
@@ -3887,13 +3889,13 @@ proto_register_dnp3(void)
{ &hf_dnp3_al_anaout16,
{ "Output Value (16 bit)", "dnp3.al.anaout",
- FT_UINT16, BASE_DEC, NULL, 0x0,
+ FT_INT16, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_dnp3_al_anaout32,
{ "Output Value (32 bit)", "dnp3.al.anaout",
- FT_UINT32, BASE_DEC, NULL, 0x0,
+ FT_INT32, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},