aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-dvbci.c
diff options
context:
space:
mode:
authorMartin Kaiser <wireshark@kaiser.cx>2014-01-10 09:15:08 +0000
committerMartin Kaiser <wireshark@kaiser.cx>2014-01-10 09:15:08 +0000
commit8a99c0428ce72b75ff247559d56c86b350484776 (patch)
tree52f801e2352d799279100f0581eb6d4800d54dcb /epan/dissectors/packet-dvbci.c
parent80ed2d24bd54cddfdb28d26359bca7069780ebfc (diff)
dissect Digital Only Token and retention limit
svn path=/trunk/; revision=54688
Diffstat (limited to 'epan/dissectors/packet-dvbci.c')
-rw-r--r--epan/dissectors/packet-dvbci.c27
1 files changed, 25 insertions, 2 deletions
diff --git a/epan/dissectors/packet-dvbci.c b/epan/dissectors/packet-dvbci.c
index b4196a9270..0255879a52 100644
--- a/epan/dissectors/packet-dvbci.c
+++ b/epan/dissectors/packet-dvbci.c
@@ -967,6 +967,8 @@ static int hf_dvbci_uri_aps = -1;
static int hf_dvbci_uri_emi = -1;
static int hf_dvbci_uri_ict = -1;
static int hf_dvbci_uri_rct = -1;
+static int hf_dvbci_uri_dot = -1;
+static int hf_dvbci_uri_rl = -1;
static int hf_dvbci_cc_key_register = -1;
static int hf_dvbci_cc_status_field = -1;
static int hf_dvbci_cc_op_mode = -1;
@@ -1953,7 +1955,7 @@ dissect_cc_item(tvbuff_t *tvb, gint offset,
guint8 dat_id;
asn1_ctx_t asn1_ctx;
int hf_cert_index;
- guint8 emi;
+ guint8 uri_ver, emi, rl;
guint16 prog_num;
guint8 status;
@@ -1992,6 +1994,7 @@ dissect_cc_item(tvbuff_t *tvb, gint offset,
break;
case CC_ID_URI:
col_append_sep_fstr(pinfo->cinfo, COL_INFO, NULL, "URI");
+ uri_ver = tvb_get_guint8(tvb, offset);
proto_tree_add_item(cc_item_tree, hf_dvbci_uri_ver,
tvb, offset, 1, ENC_BIG_ENDIAN);
proto_tree_add_item(cc_item_tree, hf_dvbci_uri_aps,
@@ -2006,7 +2009,17 @@ dissect_cc_item(tvbuff_t *tvb, gint offset,
proto_tree_add_item(cc_item_tree, hf_dvbci_uri_rct,
tvb, offset+1, 1, ENC_BIG_ENDIAN);
}
- /* digital only token and retention limit will be added */
+ if (emi!=0x03)
+ break;
+ if (uri_ver==1)
+ rl = tvb_get_guint8(tvb, offset+2) & 0x3F;
+ else {
+ rl = tvb_get_guint8(tvb, offset+2);
+ proto_tree_add_item(cc_item_tree, hf_dvbci_uri_dot,
+ tvb, offset+2, 1, ENC_BIG_ENDIAN);
+ }
+ proto_tree_add_uint(cc_item_tree, hf_dvbci_uri_rl,
+ tvb, offset+2, 1, rl);
break;
case CC_ID_PROG_NUM:
prog_num = tvb_get_ntohs(tvb, offset);
@@ -5372,6 +5385,16 @@ proto_register_dvbci(void)
{ "Redistribution control trigger (RCT)", "dvb-ci.cc.uri.rct",
FT_UINT8, BASE_HEX, NULL, 0x04, NULL, HFILL }
},
+ { &hf_dvbci_uri_dot,
+ { "Digital only token (DOT)", "dvb-ci.cc.uri.dot",
+ FT_UINT8, BASE_HEX, NULL, 0x01, NULL, HFILL }
+ },
+ /* retention limit is 6bit in URIv1 and 8bit in URIv2 and later
+ the position depends on the version, we can't define a mask here */
+ { &hf_dvbci_uri_rl,
+ { "Retention limit", "dvb-ci.cc.uri.rl",
+ FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }
+ },
{ &hf_dvbci_cc_key_register,
{ "Key register", "dvb-ci.cc.key_register",
FT_UINT8, BASE_HEX, VALS(dvbci_cc_key_register), 0, NULL, HFILL }