sniff: send ATR over GSMTAP

Change-Id: Id35129883f08002a4a796b56954a128e2b533245
This commit is contained in:
Kévin Redon
2018-07-26 14:51:15 +02:00
parent 352809992c
commit d1c6536154

View File

@@ -65,7 +65,7 @@ struct st_transport {
/* 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 @@ static int gsmtap_send_sim(const uint8_t *apdu, unsigned int len)
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 @@ static int process_data(enum simtrace_msg_type_sniff type, const uint8_t *buf, i
}
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;