aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-dvbci.c
diff options
context:
space:
mode:
authoretxrab <etxrab@f5534014-38df-0310-8fa8-9805f1628bb7>2011-09-07 04:35:41 +0000
committeretxrab <etxrab@f5534014-38df-0310-8fa8-9805f1628bb7>2011-09-07 04:35:41 +0000
commit5671e038e5573192b39cbd2b6a6ae42a6bf7f0ba (patch)
tree479d7a555ba7e30c8202e7454ef94d46020d16e6 /epan/dissectors/packet-dvbci.c
parentc981bc25b59f3016b5f47716048dfc78f355914d (diff)
From Martin Kaiser:
DVB-CI / CI+ Host language and country resource. https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=6308 git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@38907 f5534014-38df-0310-8fa8-9805f1628bb7
Diffstat (limited to 'epan/dissectors/packet-dvbci.c')
-rw-r--r--epan/dissectors/packet-dvbci.c100
1 files changed, 74 insertions, 26 deletions
diff --git a/epan/dissectors/packet-dvbci.c b/epan/dissectors/packet-dvbci.c
index b9af091ffb..01367c3590 100644
--- a/epan/dissectors/packet-dvbci.c
+++ b/epan/dissectors/packet-dvbci.c
@@ -272,6 +272,10 @@ static void
dissect_dvbci_payload_mmi(guint32 tag, gint len_field,
tvbuff_t *tvb, gint offset, packet_info *pinfo,
proto_tree *tree);
+static void
+dissect_dvbci_payload_hlc(guint32 tag, gint len_field _U_,
+ tvbuff_t *tvb, gint offset, packet_info *pinfo,
+ proto_tree *tree);
/* apdu defines */
@@ -303,6 +307,10 @@ dissect_dvbci_payload_mmi(guint32 tag, gint len_field,
#define T_MENU_ANSW 0x9F880B
#define T_LIST_LAST 0x9F880C
#define T_LIST_MORE 0x9F880D
+#define T_HOST_COUNTRY_ENQ 0x9F8100
+#define T_HOST_COUNTRY 0x9F8101
+#define T_HOST_LANGUAGE_ENQ 0x9F8110
+#define T_HOST_LANGUAGE 0x9F8111
/* the following apdus are recognized but not dissected in this release */
#define T_COMMS_CMD 0x9F8C00
@@ -320,9 +328,9 @@ dissect_dvbci_payload_mmi(guint32 tag, gint len_field,
#define IS_MENU_APDU(t) (t==T_MENU_MORE || t==T_MENU_LAST)
static const apdu_info_t apdu_info[] = {
- {T_PROFILE_ENQ, 0, 0, DIRECTION_ANY, NULL},
- {T_PROFILE, 0, LEN_FIELD_ANY, DIRECTION_ANY, dissect_dvbci_payload_rm},
- {T_PROFILE_CHANGE, 0, 0, DIRECTION_ANY, NULL},
+ {T_PROFILE_ENQ, 0, 0, DIRECTION_ANY, NULL},
+ {T_PROFILE, 0, LEN_FIELD_ANY, DIRECTION_ANY, dissect_dvbci_payload_rm},
+ {T_PROFILE_CHANGE, 0, 0, DIRECTION_ANY, NULL},
{T_APP_INFO_ENQ, 0, 0, DATA_HOST_TO_CAM, NULL},
{T_APP_INFO, 6, LEN_FIELD_ANY, DATA_CAM_TO_HOST, dissect_dvbci_payload_ap},
@@ -330,29 +338,34 @@ static const apdu_info_t apdu_info[] = {
{T_REQUEST_CICAM_RESET, 0, 0, DATA_CAM_TO_HOST, NULL},
{T_DATARATE_INFO, 0, 1, DATA_HOST_TO_CAM, dissect_dvbci_payload_ap},
- {T_CA_INFO_ENQ, 0, 0, DATA_HOST_TO_CAM, NULL},
- {T_CA_INFO, 0, LEN_FIELD_ANY, DATA_CAM_TO_HOST, dissect_dvbci_payload_ca},
- {T_CA_PMT, 6, LEN_FIELD_ANY, DATA_HOST_TO_CAM, dissect_dvbci_payload_ca},
- {T_CA_PMT_REPLY, 8, LEN_FIELD_ANY, DATA_CAM_TO_HOST, dissect_dvbci_payload_ca},
-
- {T_TUNE, 0, 8, DATA_CAM_TO_HOST, dissect_dvbci_payload_hc},
- {T_REPLACE, 0, 5, DATA_CAM_TO_HOST, dissect_dvbci_payload_hc},
- {T_CLEAR_REPLACE, 0, 1, DATA_CAM_TO_HOST, dissect_dvbci_payload_hc},
- {T_ASK_RELEASE, 0, 0, DATA_HOST_TO_CAM, NULL},
-
- {T_DATE_TIME_ENQ, 0, 1, DATA_CAM_TO_HOST, dissect_dvbci_payload_dt},
- {T_DATE_TIME, 5, LEN_FIELD_ANY, DATA_HOST_TO_CAM, dissect_dvbci_payload_dt},
-
- {T_CLOSE_MMI, 1, LEN_FIELD_ANY, DIRECTION_ANY, dissect_dvbci_payload_mmi},
- {T_DISPLAY_CONTROL, 1, LEN_FIELD_ANY, DATA_CAM_TO_HOST, dissect_dvbci_payload_mmi},
- {T_DISPLAY_REPLY, 1, LEN_FIELD_ANY, DATA_HOST_TO_CAM, dissect_dvbci_payload_mmi},
- {T_ENQ, 2, LEN_FIELD_ANY, DATA_CAM_TO_HOST, dissect_dvbci_payload_mmi},
- {T_ANSW, 1, LEN_FIELD_ANY, DATA_HOST_TO_CAM, dissect_dvbci_payload_mmi},
- {T_MENU_LAST, 13, LEN_FIELD_ANY, DATA_CAM_TO_HOST, dissect_dvbci_payload_mmi},
- {T_MENU_MORE, 13, LEN_FIELD_ANY, DATA_CAM_TO_HOST, dissect_dvbci_payload_mmi},
- {T_MENU_ANSW, 0, 1, DATA_HOST_TO_CAM, dissect_dvbci_payload_mmi},
- {T_LIST_LAST, 13, LEN_FIELD_ANY, DATA_CAM_TO_HOST, dissect_dvbci_payload_mmi},
- {T_LIST_MORE, 13, LEN_FIELD_ANY, DATA_CAM_TO_HOST, dissect_dvbci_payload_mmi},
+ {T_CA_INFO_ENQ, 0, 0, DATA_HOST_TO_CAM, NULL},
+ {T_CA_INFO, 0, LEN_FIELD_ANY, DATA_CAM_TO_HOST, dissect_dvbci_payload_ca},
+ {T_CA_PMT, 6, LEN_FIELD_ANY, DATA_HOST_TO_CAM, dissect_dvbci_payload_ca},
+ {T_CA_PMT_REPLY, 8, LEN_FIELD_ANY, DATA_CAM_TO_HOST, dissect_dvbci_payload_ca},
+
+ {T_TUNE, 0, 8, DATA_CAM_TO_HOST, dissect_dvbci_payload_hc},
+ {T_REPLACE, 0, 5, DATA_CAM_TO_HOST, dissect_dvbci_payload_hc},
+ {T_CLEAR_REPLACE, 0, 1, DATA_CAM_TO_HOST, dissect_dvbci_payload_hc},
+ {T_ASK_RELEASE, 0, 0, DATA_HOST_TO_CAM, NULL},
+
+ {T_DATE_TIME_ENQ, 0, 1, DATA_CAM_TO_HOST, dissect_dvbci_payload_dt},
+ {T_DATE_TIME, 5, LEN_FIELD_ANY, DATA_HOST_TO_CAM, dissect_dvbci_payload_dt},
+
+ {T_CLOSE_MMI, 1, LEN_FIELD_ANY, DIRECTION_ANY, dissect_dvbci_payload_mmi},
+ {T_DISPLAY_CONTROL, 1, LEN_FIELD_ANY, DATA_CAM_TO_HOST, dissect_dvbci_payload_mmi},
+ {T_DISPLAY_REPLY, 1, LEN_FIELD_ANY, DATA_HOST_TO_CAM, dissect_dvbci_payload_mmi},
+ {T_ENQ, 2, LEN_FIELD_ANY, DATA_CAM_TO_HOST, dissect_dvbci_payload_mmi},
+ {T_ANSW, 1, LEN_FIELD_ANY, DATA_HOST_TO_CAM, dissect_dvbci_payload_mmi},
+ {T_MENU_LAST, 13, LEN_FIELD_ANY, DATA_CAM_TO_HOST, dissect_dvbci_payload_mmi},
+ {T_MENU_MORE, 13, LEN_FIELD_ANY, DATA_CAM_TO_HOST, dissect_dvbci_payload_mmi},
+ {T_MENU_ANSW, 0, 1, DATA_HOST_TO_CAM, dissect_dvbci_payload_mmi},
+ {T_LIST_LAST, 13, LEN_FIELD_ANY, DATA_CAM_TO_HOST, dissect_dvbci_payload_mmi},
+ {T_LIST_MORE, 13, LEN_FIELD_ANY, DATA_CAM_TO_HOST, dissect_dvbci_payload_mmi},
+
+ {T_HOST_COUNTRY_ENQ, 0, 0, DATA_CAM_TO_HOST, NULL},
+ {T_HOST_COUNTRY, 0, 3, DATA_HOST_TO_CAM, dissect_dvbci_payload_hlc},
+ {T_HOST_LANGUAGE_ENQ, 0, 0, DATA_CAM_TO_HOST, NULL},
+ {T_HOST_LANGUAGE, 0, 3, DATA_HOST_TO_CAM, dissect_dvbci_payload_hlc}
};
static const value_string dvbci_apdu_tag[] = {
@@ -392,6 +405,10 @@ static const value_string dvbci_apdu_tag[] = {
{ T_COMMS_SEND_MORE, "Comms send more" },
{ T_COMMS_RCV_LAST, "Comms receive last" },
{ T_COMMS_RCV_MORE, "Comms receive more" },
+ { T_HOST_COUNTRY_ENQ, "Host country enquiry" },
+ { T_HOST_COUNTRY, "Host country" },
+ { T_HOST_LANGUAGE_ENQ, "Host language enquiry" },
+ { T_HOST_LANGUAGE, "Host language" },
{ 0, NULL }
};
@@ -493,6 +510,8 @@ static int hf_dvbci_ans_id = -1;
static int hf_dvbci_choice_nb = -1;
static int hf_dvbci_choice_ref = -1;
static int hf_dvbci_item_nb = -1;
+static int hf_dvbci_host_country = -1;
+static int hf_dvbci_host_language = -1;
static GHashTable *tpdu_fragment_table = NULL;
@@ -1527,6 +1546,29 @@ dissect_dvbci_payload_mmi(guint32 tag, gint len_field,
static void
+dissect_dvbci_payload_hlc(guint32 tag, gint len_field _U_,
+ tvbuff_t *tvb, gint offset, packet_info *pinfo, proto_tree *tree)
+{
+ guint8 *str;
+
+ if (tag==T_HOST_COUNTRY) {
+ proto_tree_add_item(tree, hf_dvbci_host_country,
+ tvb, offset, tvb_reported_length_remaining(tvb, offset), ENC_NA);
+ }
+ else if (tag==T_HOST_LANGUAGE) {
+ proto_tree_add_item(tree, hf_dvbci_host_language,
+ tvb, offset, tvb_reported_length_remaining(tvb, offset), ENC_NA);
+ }
+
+ /* both apdus' body is only a country code, this can be shared */
+ str = tvb_get_ephemeral_string(tvb, offset,
+ tvb_reported_length_remaining(tvb, offset));
+ if (str)
+ col_append_sep_fstr(pinfo->cinfo, COL_INFO, ": ", "%s", str);
+}
+
+
+static void
dissect_dvbci_apdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
guint8 direction)
{
@@ -2546,6 +2588,12 @@ proto_register_dvbci(void)
NULL, 0, NULL, HFILL } },
{ &hf_dvbci_item_nb,
{ "Number of list items", "dvb-ci.mmi.item_nb", FT_UINT8, BASE_DEC,
+ NULL, 0, NULL, HFILL } },
+ { &hf_dvbci_host_country,
+ { "Host country", "dvb-ci.hlc.country", FT_STRING, BASE_NONE,
+ NULL, 0, NULL, HFILL } },
+ { &hf_dvbci_host_language,
+ { "Host language", "dvb-ci.hlc.language", FT_STRING, BASE_NONE,
NULL, 0, NULL, HFILL } }
};