summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--epan/dissectors/packet-etsi_card_app_toolkit.c113
1 files changed, 113 insertions, 0 deletions
diff --git a/epan/dissectors/packet-etsi_card_app_toolkit.c b/epan/dissectors/packet-etsi_card_app_toolkit.c
index bed43d1b57..e662d19ab6 100644
--- a/epan/dissectors/packet-etsi_card_app_toolkit.c
+++ b/epan/dissectors/packet-etsi_card_app_toolkit.c
@@ -87,6 +87,14 @@ static int hf_ctlv_at_rsp = -1;
static int hf_ctlv_language = -1;
static int hf_ctlv_me_status = -1;
static int hf_ctlv_timing_adv = -1;
+static int hf_ctlv_aid_rid = -1;
+static int hf_ctlv_aid_pix_app_code_etsi = -1;
+static int hf_ctlv_aid_pix_app_code_3gpp = -1;
+static int hf_ctlv_aid_pix_app_code_3gpp2 = -1;
+static int hf_ctlv_aid_pix_app_code = -1;
+static int hf_ctlv_aid_pix_country_code = -1;
+static int hf_ctlv_aid_pix_app_prov_code = -1;
+static int hf_ctlv_aid_pix_app_prov_field = -1;
static int hf_ctlv_bearer = -1;
static int hf_ctlv_bearer_descr = -1;
static int hf_ctlv_bearer_csd_data_rate = -1;
@@ -846,6 +854,50 @@ static const string_string ims_status_code[] = {
{ 0, NULL }
};
+#define AID_RFID_ETSI 0xA000000009
+#define AID_RFID_3GPP 0xA000000087
+#define AID_RFID_3GPP2 0xA000000343
+#define AID_RFID_OMA 0xA000000412
+#define AID_RFID_WIMAX 0xA000000424
+
+static const val64_string aid_rid_vals[] = {
+ { AID_RFID_ETSI, "ETSI"},
+ { AID_RFID_3GPP, "3GPP"},
+ { AID_RFID_3GPP2, "3GPP2"},
+ { AID_RFID_OMA, "OMA"},
+ { AID_RFID_WIMAX, "WiMAX Forum"},
+ { 0, NULL}
+};
+
+static const value_string aid_pix_app_code_etsi_vals[] = {
+ { 0x0001, "GSM"},
+ { 0x0002, "GSM SIM toolkit"},
+ { 0x0003, "GSM SIM API for Java Card"},
+ { 0x0004, "TETRA"},
+ { 0x0005, "UICC API for Java Card"},
+ { 0x0101, "DVB CBMS KMS"},
+ { 0x0201, "M2MSM"},
+ { 0, NULL}
+};
+
+static const value_string aid_pix_app_code_3gpp_vals[] = {
+ { 0x1001, "3GPP UICC"},
+ { 0x1002, "3GPP USIM"},
+ { 0x1003, "3GPP USIM toolkit"},
+ { 0x1004, "3GPP ISIM"},
+ { 0x1005, "3GPP (U)SIM API for Java Card"},
+ { 0x1006, "3GPP ISIM API for Java Card"},
+ { 0x1007, "3GPP Contact Manager API for Java Card"},
+ { 0x1008, "3GPP USIM-INI"},
+ { 0x1009, "3GPP USIM-RN"},
+ { 0, NULL}
+};
+
+static const value_string aid_pix_app_code_3gpp2_vals[] = {
+ { 0x1002, "3GPP2 CSIM"},
+ { 0, NULL}
+};
+
static void
dissect_cat(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
@@ -1115,6 +1167,27 @@ dissect_cat(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
proto_tree_add_item(elem_tree, hf_ctlv_me_status, tvb, pos, 1, ENC_NA);
proto_tree_add_item(elem_tree, hf_ctlv_timing_adv, tvb, pos+1, 1, ENC_NA);
break;
+ case 0x2f: /* AID */
+ {
+ guint64 rid = tvb_get_ntoh40(tvb, pos);
+
+ proto_tree_add_uint64(elem_tree, hf_ctlv_aid_rid, tvb, pos, 5, rid);
+ if (rid == AID_RFID_ETSI) {
+ proto_tree_add_item(elem_tree, hf_ctlv_aid_pix_app_code_etsi, tvb, pos+5, 2, ENC_BIG_ENDIAN);
+ } else if (rid == AID_RFID_3GPP) {
+ proto_tree_add_item(elem_tree, hf_ctlv_aid_pix_app_code_3gpp, tvb, pos+5, 2, ENC_BIG_ENDIAN);
+ } else if (rid == AID_RFID_3GPP2) {
+ proto_tree_add_item(elem_tree, hf_ctlv_aid_pix_app_code_3gpp2, tvb, pos+5, 2, ENC_BIG_ENDIAN);
+ } else {
+ proto_tree_add_item(elem_tree, hf_ctlv_aid_pix_app_code, tvb, pos+5, 2, ENC_BIG_ENDIAN);
+ }
+ proto_tree_add_item(elem_tree, hf_ctlv_aid_pix_country_code, tvb, pos+7, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(elem_tree, hf_ctlv_aid_pix_app_prov_code, tvb, pos+9, 3, ENC_BIG_ENDIAN);
+ if (len > 12) {
+ proto_tree_add_item(elem_tree, hf_ctlv_aid_pix_app_prov_field, tvb, pos+12, len-12, ENC_NA);
+ }
+ }
+ break;
case 0x32: /* bearer */
for (i = 0; i < len; i++)
proto_tree_add_item(elem_tree, hf_ctlv_bearer, tvb, pos+i, 1, ENC_NA);
@@ -1454,6 +1527,46 @@ proto_register_card_app_toolkit(void)
FT_UINT8, BASE_DEC, NULL, 0,
NULL, HFILL },
},
+ { &hf_ctlv_aid_rid,
+ { "RID", "etsi_cat.comp_tlv.aid.rid",
+ FT_UINT64, BASE_HEX|BASE_VAL64_STRING, VALS(aid_rid_vals), 0,
+ NULL, HFILL },
+ },
+ { &hf_ctlv_aid_pix_app_code_etsi,
+ { "PIX Application Code", "etsi_cat.comp_tlv.aid.pix.app_code",
+ FT_UINT16, BASE_HEX, VALS(aid_pix_app_code_etsi_vals), 0,
+ NULL, HFILL },
+ },
+ { &hf_ctlv_aid_pix_app_code_3gpp,
+ { "PIX Application Code", "etsi_cat.comp_tlv.aid.pix.app_code",
+ FT_UINT16, BASE_HEX, VALS(aid_pix_app_code_3gpp_vals), 0,
+ NULL, HFILL },
+ },
+ { &hf_ctlv_aid_pix_app_code_3gpp2,
+ { "PIX Application Code", "etsi_cat.comp_tlv.aid.pix.app_code",
+ FT_UINT16, BASE_HEX, VALS(aid_pix_app_code_3gpp2_vals), 0,
+ NULL, HFILL },
+ },
+ { &hf_ctlv_aid_pix_app_code,
+ { "PIX Application Code", "etsi_cat.comp_tlv.aid.pix.app_code",
+ FT_UINT16, BASE_HEX, NULL, 0,
+ NULL, HFILL },
+ },
+ { &hf_ctlv_aid_pix_country_code,
+ { "PIX Country Code", "etsi_cat.comp_tlv.aid.pix.country_code",
+ FT_UINT16, BASE_HEX, NULL, 0,
+ NULL, HFILL },
+ },
+ { &hf_ctlv_aid_pix_app_prov_code,
+ { "PIX Application Provider Code", "etsi_cat.comp_tlv.aid.pix.app_prov_code",
+ FT_UINT24, BASE_HEX, NULL, 0,
+ NULL, HFILL },
+ },
+ { &hf_ctlv_aid_pix_app_prov_field,
+ { "PIX Application Provider Field", "etsi_cat.comp_tlv.aid.pix.app_prov_field",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL },
+ },
{ &hf_ctlv_bearer,
{ "Bearer", "etsi_cat.comp_tlv.bearer",
FT_UINT8, BASE_HEX, VALS(bearer_vals), 0,