sim: osmo-sim-test: Also dump binary files
diff --git a/utils/osmo-sim-test.c b/utils/osmo-sim-test.c
index 5fbb03f..4cd8b05 100644
--- a/utils/osmo-sim-test.c
+++ b/utils/osmo-sim-test.c
@@ -270,42 +270,71 @@
 {
 	struct tlv_parsed tp;
 	struct osim_fcp_fd_decoded ffdd;
-	struct msgb *msg;
-	int rc, i;
+	struct msgb *msg, *rmsg;
+	int rc, i, offset;
 
 	msg = select_file(chan, fid);
-	if (!msg)
+	if (!msg) {
+		printf("Unable to select file\n");
 		return -EIO;
-	if (msgb_apdu_sw(msg) != 0x9000)
+	}
+	if (msgb_apdu_sw(msg) != 0x9000) {
+		printf("status 0x%04x selecting file\n", msgb_apdu_sw(msg));
 		goto out;
+	}
 
 	rc = tlv_parse(&tp, &ts102221_fcp_tlv_def, msgb_apdu_de(msg)+2, msgb_apdu_le(msg)-4, 0, 0);
-	if (rc < 0)
+	if (rc < 0) {
+		printf("Unable to parse FCP\n");
 		goto out;
+	}
 
 	if (!TLVP_PRESENT(&tp, UICC_FCP_T_FILE_DESC) ||
-	    TLVP_LEN(&tp, UICC_FCP_T_FILE_DESC) < 5)
+	    TLVP_LEN(&tp, UICC_FCP_T_FILE_DESC) < 2) {
+		printf("No file descriptor present ?!?\n");
 		goto out;
+	}
 
 	rc = osim_fcp_fd_decode(&ffdd, TLVP_VAL(&tp, UICC_FCP_T_FILE_DESC),
 				TLVP_LEN(&tp, UICC_FCP_T_FILE_DESC));
-	if (rc < 0)
+	if (rc < 0) {
+		printf("Unable to decode File Descriptor\n");
 		goto out;
+	}
 
-	if (ffdd.type != TYPE_EF)
+	if (ffdd.type != TYPE_EF) {
+		printf("File Type != EF\n");
 		goto out;
+	}
+
+	printf("EF type: %u\n", ffdd.ef_type);
 
 	switch (ffdd.ef_type) {
 	case EF_TYPE_RECORD_FIXED:
 		for (i = 0; i < ffdd.num_rec; i++) {
-			struct msgb *rmsg = read_record_nr(chan, i+1, ffdd.rec_len);
+			rmsg = read_record_nr(chan, i+1, ffdd.rec_len);
 			if (!msg)
-				return NULL;
+				return -EIO;
 			printf("Rec %03u: %s\n", i+1,
 				osmo_hexdump(msgb_apdu_de(rmsg), msgb_apdu_le(rmsg)));
 		}
 		break;
 	case EF_TYPE_TRANSP:
+		if (!TLVP_PRESENT(&tp, UICC_FCP_T_FILE_SIZE))
+			goto out;
+		i = ntohs(*(uint16_t *)TLVP_VAL(&tp, UICC_FCP_T_FILE_SIZE));
+		printf("File size: %d bytes\n", i);
+
+		for (offset = 0; offset < i-1; ) {
+			uint16_t remain_len = i - offset;
+			uint16_t read_len = OSMO_MIN(remain_len, 256);
+			rmsg = read_binary(chan, offset, read_len);
+			if (!msg)
+				return -EIO;
+			offset += read_len;
+			printf("Content: %s\n",
+				osmo_hexdump(msgb_apdu_de(rmsg), msgb_apdu_le(rmsg)));
+		}
 		break;
 	default:
 		goto out;