aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-dvbci.c
diff options
context:
space:
mode:
authorMartin Kaiser <wireshark@kaiser.cx>2014-01-23 22:18:41 +0000
committerMartin Kaiser <wireshark@kaiser.cx>2014-01-23 22:18:41 +0000
commit055be45abf8dd6ea3abca7d0fc27e1ad4f9eb77e (patch)
tree6c3ebd2cd8057298ea2d5e3d33d9ddfe97fc65dd /epan/dissectors/packet-dvbci.c
parentbc14487ea67b84707bdac7d273efdee06261cac2 (diff)
the menu string is a DVB string
svn path=/trunk/; revision=54933
Diffstat (limited to 'epan/dissectors/packet-dvbci.c')
-rw-r--r--epan/dissectors/packet-dvbci.c27
1 files changed, 19 insertions, 8 deletions
diff --git a/epan/dissectors/packet-dvbci.c b/epan/dissectors/packet-dvbci.c
index a9560af5ed..ad4ab24521 100644
--- a/epan/dissectors/packet-dvbci.c
+++ b/epan/dissectors/packet-dvbci.c
@@ -914,6 +914,7 @@ static int hf_dvbci_app_type = -1;
static int hf_dvbci_app_manf = -1;
static int hf_dvbci_manf_code = -1;
static int hf_dvbci_menu_str_len = -1;
+static int hf_dvbci_ap_char_tbl = -1;
static int hf_dvbci_data_rate = -1;
static int hf_dvbci_ca_sys_id = -1;
static int hf_dvbci_ca_pmt_list_mgmt = -1;
@@ -2514,9 +2515,11 @@ dissect_dvbci_payload_ap(guint32 tag, gint len_field _U_,
tvbuff_t *tvb, gint offset, circuit_t *circuit _U_,
packet_info *pinfo, proto_tree *tree)
{
- guint8 menu_str_len;
- guint8 *menu_string;
- guint8 data_rate;
+ guint8 menu_str_len;
+ guint enc_len;
+ dvb_encoding_e encoding;
+ guint8 *menu_string;
+ guint8 data_rate;
if (tag==T_APP_INFO) {
proto_tree_add_item(tree, hf_dvbci_app_type, tvb, offset, 1, ENC_BIG_ENDIAN);
@@ -2531,11 +2534,15 @@ dissect_dvbci_payload_ap(guint32 tag, gint len_field _U_,
proto_tree_add_item(
tree, hf_dvbci_menu_str_len, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
- /* ephemeral -> string is freed automatically when dissection
- of this packet is finished
- tvb_get_string() always returns a 0-terminated string */
- menu_string = tvb_get_string(wmem_packet_scope(), tvb, offset, menu_str_len);
- if (menu_string) {
+ if (menu_str_len > 0) {
+ enc_len = dvb_analyze_string_charset(
+ tvb, offset, menu_str_len, &encoding);
+ dvb_add_chartbl(
+ tree, hf_dvbci_ap_char_tbl, tvb, offset, enc_len, encoding);
+ offset += enc_len;
+ menu_str_len -= enc_len;
+ menu_string = tvb_get_string_enc(wmem_packet_scope(),
+ tvb, offset, menu_str_len, dvb_enc_to_item_enc(encoding));
col_append_sep_fstr(pinfo->cinfo, COL_INFO, NULL,
"Module name %s", menu_string);
proto_tree_add_text(tree, tvb, offset, menu_str_len,
@@ -5172,6 +5179,10 @@ proto_register_dvbci(void)
{ "Menu string length", "dvb-ci.ap.menu_string_length",
FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }
},
+ { &hf_dvbci_ap_char_tbl,
+ { "Character table", "dvb-ci.ap.menu_char_tbl",
+ FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL}
+ },
{ &hf_dvbci_data_rate,
{ "Transport stream data rate supported by the host",
"dvb-ci.ap.data_rate",