# 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