sniff: send ATR over GSMTAP
Change-Id: Id35129883f08002a4a796b56954a128e2b533245
diff --git a/host/simtrace2-sniff.c b/host/simtrace2-sniff.c
index 776253a..6d5766f 100644
--- a/host/simtrace2-sniff.c
+++ b/host/simtrace2-sniff.c
@@ -65,7 +65,7 @@
/* global GSMTAP instance */
static struct gsmtap_inst *g_gti;
-static int gsmtap_send_sim(const uint8_t *apdu, unsigned int len)
+static int gsmtap_send_sim(uint8_t sub_type, const uint8_t *data, unsigned int len)
{
struct gsmtap_hdr *gh;
unsigned int gross_len = len + sizeof(*gh);
@@ -80,8 +80,9 @@
gh->version = GSMTAP_VERSION;
gh->hdr_len = sizeof(*gh)/4;
gh->type = GSMTAP_TYPE_SIM;
+ gh->sub_type = sub_type;
- memcpy(buf + sizeof(*gh), apdu, len);
+ memcpy(buf + sizeof(*gh), data, len);
rc = write(gsmtap_inst_fd(g_gti), buf, gross_len);
if (rc < 0) {
@@ -235,9 +236,17 @@
}
printf("\n");
- if (SIMTRACE_MSGT_SNIFF_TPDU == type) {
- /* send TPDU (now considered as APDU) to GSMTAP */
- gsmtap_send_sim(data->data, data->length);
+ /* Send message as GSNTAP */
+ switch (type) {
+ case SIMTRACE_MSGT_SNIFF_ATR:
+ gsmtap_send_sim(GSMTAP_SIM_ATR, data->data, data->length);
+ break;
+ case SIMTRACE_MSGT_SNIFF_TPDU:
+ /* TPDU is now considered as APDU since SIMtrace sends complete TPDU */
+ gsmtap_send_sim(GSMTAP_SIM_APDU, data->data, data->length);
+ break;
+ default:
+ break;
}
return 0;