diff options
Diffstat (limited to 'epan/dissectors/asn1/sv/sv.cnf')
-rw-r--r-- | epan/dissectors/asn1/sv/sv.cnf | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/epan/dissectors/asn1/sv/sv.cnf b/epan/dissectors/asn1/sv/sv.cnf new file mode 100644 index 0000000000..4b96de73e1 --- /dev/null +++ b/epan/dissectors/asn1/sv/sv.cnf @@ -0,0 +1,84 @@ +# sv.cnf +# SampledValue conformation file + +#.MODULE_IMPORT + +#.EXPORTS + +#.PDU + +#.NO_EMIT ONLY_VALS +SampledValues + +#.TYPE_RENAME + +#.FIELD_RENAME + +#.FN_BODY ASDU/smpCnt VAL_PTR = &value + guint32 value; +%(DEFAULT_BODY)s + sv_data.smpCnt = value; +#.END + +#.FN_BODY UtcTime + guint32 len; + guint32 seconds; + guint32 fraction; + guint32 nanoseconds; + nstime_t ts; + gchar * ptime; + + len = tvb_reported_length_remaining(tvb, offset); + + if(len != 8) + { + proto_tree_add_expert_format(tree, actx->pinfo, &ei_sv_mal_utctime, tvb, offset, len, + "BER Error: malformed UTCTime encoding, length must be 8 bytes"); + if(hf_index >= 0) + { + proto_tree_add_string(tree, hf_index, tvb, offset, len, "????"); + } + return offset; + } + + seconds = tvb_get_ntohl(tvb, offset); + fraction = tvb_get_ntoh24(tvb, offset+4) * 0x100; /* Only 3 bytes are recommended */ + nanoseconds = (guint32)( ((guint64)fraction * G_GUINT64_CONSTANT(1000000000)) / G_GUINT64_CONSTANT(0x100000000) ) ; + + ts.secs = seconds; + ts.nsecs = nanoseconds; + + ptime = abs_time_to_str(wmem_packet_scope(), &ts, ABSOLUTE_TIME_UTC, TRUE); + + if(hf_index >= 0) + { + proto_tree_add_string(tree, hf_index, tvb, offset, len, ptime); + } + offset += 8; + return offset; +#.END + +#.TYPE_ATTR +UtcTime TYPE = FT_STRING DISPLAY = BASE_NONE + +#.FN_BODY ASDU/smpSynch VAL_PTR = &value + guint32 value; +%(DEFAULT_BODY)s + sv_data.smpSynch = value; +#.END + +#.FN_BODY ASDU/smpMod VAL_PTR = &value + guint32 value; +%(DEFAULT_BODY)s + sv_data.smpMod = value; +#.END + +#.FN_BODY Data + if (sv_decode_data_as_phsmeas) { + offset = dissect_PhsMeas1(implicit_tag, actx->pinfo, tree, tvb, offset, hf_index); + } else { + offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, NULL); + } +#.END + +#.END_OF_CNF |