mirror of
https://gitea.osmocom.org/sim-card/simtrace2.git
synced 2026-03-22 16:28:32 +03:00
sniffer: also send malformed message over USB
Change-Id: I124c8db1d2f836e185630bbe8b5e52eb085d702a
This commit is contained in:
@@ -412,8 +412,11 @@ static void process_byte_atr(uint8_t byte)
|
|||||||
atr_state = ATR_S_WAIT_T0; /* wait for format byte */
|
atr_state = ATR_S_WAIT_T0; /* wait for format byte */
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
atr_i--; /* revert last byte */
|
|
||||||
TRACE_WARNING("Invalid TS received\n\r");
|
TRACE_WARNING("Invalid TS received\n\r");
|
||||||
|
led_blink(LED_RED, BLINK_2F_O); /* indicate error to user */
|
||||||
|
usb_send_atr(SNIFF_DATA_FLAG_ERROR_MALFORMED); /* send ATR to host software using USB */
|
||||||
|
change_state(ISO7816_S_WAIT_ATR); /* reset state */
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
i = 0; /* first interface byte sub-group is coming (T0 is kind of TD0) */
|
i = 0; /* first interface byte sub-group is coming (T0 is kind of TD0) */
|
||||||
break;
|
break;
|
||||||
@@ -559,6 +562,8 @@ static void process_byte_pps(uint8_t byte)
|
|||||||
pps_state = PPS_S_WAIT_PPS0; /* go to next state */
|
pps_state = PPS_S_WAIT_PPS0; /* go to next state */
|
||||||
} else {
|
} else {
|
||||||
TRACE_INFO("Invalid PPSS received\n\r");
|
TRACE_INFO("Invalid PPSS received\n\r");
|
||||||
|
led_blink(LED_RED, BLINK_2F_O); /* indicate error to user */
|
||||||
|
usb_send_pps(SNIFF_DATA_FLAG_ERROR_MALFORMED); /* send ATR to host software using USB */
|
||||||
change_state(ISO7816_S_WAIT_TPDU); /* go back to TPDU state */
|
change_state(ISO7816_S_WAIT_TPDU); /* go back to TPDU state */
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -670,6 +675,8 @@ static void process_byte_tpdu(uint8_t byte)
|
|||||||
case TPDU_S_CLA:
|
case TPDU_S_CLA:
|
||||||
if (0xff == byte) {
|
if (0xff == byte) {
|
||||||
TRACE_WARNING("0xff is not a valid class byte\n\r");
|
TRACE_WARNING("0xff is not a valid class byte\n\r");
|
||||||
|
led_blink(LED_RED, BLINK_2F_O); /* indicate error to user */
|
||||||
|
usb_send_tpdu(SNIFF_DATA_FLAG_ERROR_MALFORMED); /* send ATR to host software using USB */
|
||||||
change_state(ISO7816_S_WAIT_TPDU); /* go back to TPDU state */
|
change_state(ISO7816_S_WAIT_TPDU); /* go back to TPDU state */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -680,6 +687,8 @@ static void process_byte_tpdu(uint8_t byte)
|
|||||||
case TPDU_S_INS:
|
case TPDU_S_INS:
|
||||||
if ((0x60 == (byte & 0xf0)) || (0x90 == (byte & 0xf0))) {
|
if ((0x60 == (byte & 0xf0)) || (0x90 == (byte & 0xf0))) {
|
||||||
TRACE_WARNING("invalid CLA 0x%02x\n\r", byte);
|
TRACE_WARNING("invalid CLA 0x%02x\n\r", byte);
|
||||||
|
led_blink(LED_RED, BLINK_2F_O); /* indicate error to user */
|
||||||
|
usb_send_tpdu(SNIFF_DATA_FLAG_ERROR_MALFORMED); /* send ATR to host software using USB */
|
||||||
change_state(ISO7816_S_WAIT_TPDU); /* go back to TPDU state */
|
change_state(ISO7816_S_WAIT_TPDU); /* go back to TPDU state */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -718,6 +727,8 @@ static void process_byte_tpdu(uint8_t byte)
|
|||||||
tpdu_state = TPDU_S_SW2;
|
tpdu_state = TPDU_S_SW2;
|
||||||
} else {
|
} else {
|
||||||
TRACE_WARNING("invalid SW1 0x%02x\n\r", byte);
|
TRACE_WARNING("invalid SW1 0x%02x\n\r", byte);
|
||||||
|
led_blink(LED_RED, BLINK_2F_O); /* indicate error to user */
|
||||||
|
usb_send_tpdu(SNIFF_DATA_FLAG_ERROR_MALFORMED); /* send ATR to host software using USB */
|
||||||
change_state(ISO7816_S_WAIT_TPDU); /* go back to TPDU state */
|
change_state(ISO7816_S_WAIT_TPDU); /* go back to TPDU state */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1005,15 +1016,18 @@ void Sniffer_run(void)
|
|||||||
/* Use timeout to detect interrupted data transmission */
|
/* Use timeout to detect interrupted data transmission */
|
||||||
switch (iso_state) {
|
switch (iso_state) {
|
||||||
case ISO7816_S_IN_ATR:
|
case ISO7816_S_IN_ATR:
|
||||||
|
led_blink(LED_RED, BLINK_2F_O); /* indicate error to user */
|
||||||
usb_send_atr(SNIFF_DATA_FLAG_ERROR_INCOMPLETE); /* send incomplete ATR to host software using USB */
|
usb_send_atr(SNIFF_DATA_FLAG_ERROR_INCOMPLETE); /* send incomplete ATR to host software using USB */
|
||||||
change_state(ISO7816_S_WAIT_ATR);
|
change_state(ISO7816_S_WAIT_ATR);
|
||||||
break;
|
break;
|
||||||
case ISO7816_S_IN_TPDU:
|
case ISO7816_S_IN_TPDU:
|
||||||
|
led_blink(LED_RED, BLINK_2F_O); /* indicate error to user */
|
||||||
usb_send_tpdu(SNIFF_DATA_FLAG_ERROR_INCOMPLETE); /* send incomplete PPS to host software using USB */
|
usb_send_tpdu(SNIFF_DATA_FLAG_ERROR_INCOMPLETE); /* send incomplete PPS to host software using USB */
|
||||||
change_state(ISO7816_S_WAIT_TPDU);
|
change_state(ISO7816_S_WAIT_TPDU);
|
||||||
break;
|
break;
|
||||||
case ISO7816_S_IN_PPS_REQ:
|
case ISO7816_S_IN_PPS_REQ:
|
||||||
case ISO7816_S_IN_PPS_RSP:
|
case ISO7816_S_IN_PPS_RSP:
|
||||||
|
led_blink(LED_RED, BLINK_2F_O); /* indicate error to user */
|
||||||
usb_send_pps(SNIFF_DATA_FLAG_ERROR_INCOMPLETE); /* send incomplete TPDU to host software using USB */
|
usb_send_pps(SNIFF_DATA_FLAG_ERROR_INCOMPLETE); /* send incomplete TPDU to host software using USB */
|
||||||
change_state(ISO7816_S_WAIT_TPDU);
|
change_state(ISO7816_S_WAIT_TPDU);
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user