diff options
author | Pascal Quantin <pascal.quantin@gmail.com> | 2013-11-17 16:40:25 +0000 |
---|---|---|
committer | Pascal Quantin <pascal.quantin@gmail.com> | 2013-11-17 16:40:25 +0000 |
commit | 1c73d047b363f083caa22c35b0142c803c3f77ac (patch) | |
tree | add8529a2b56ec63572e297a45b6500be94623cc /epan/dissectors/packet-dnp.c | |
parent | d28beab7229a17d85d2e385d39831bfa32e44915 (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.c | 50 |
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 } }, |