aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/asn1/sv/sv.cnf
diff options
context:
space:
mode:
Diffstat (limited to 'epan/dissectors/asn1/sv/sv.cnf')
-rw-r--r--epan/dissectors/asn1/sv/sv.cnf84
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