Changeset 1187 for trunk/src/ifd
- Timestamp:
- 01/09/12 22:22:00 (4 months ago)
- Location:
- trunk/src/ifd
- Files:
-
- 2 edited
-
ifd-ccid.c (modified) (3 diffs)
-
process.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/ifd/ifd-ccid.c
r1186 r1187 228 228 { 229 229 unsigned char *p = (unsigned char *)status; 230 231 if ((p[7] >> 6 & 3) == 0) 232 return 0; 233 230 int ret; 231 232 if ((p[7] >> 6 & 3) == 0) { 233 ret = 0; 234 } 234 235 /* XXX */ 235 if ((p[7] >> 6 & 3) == 2) {236 else if ((p[7] >> 6 & 3) == 2) { 236 237 /*ct_error("card requests more time"); */ 237 return -300; 238 } 239 240 switch (p[8]) { 241 case CCID_ERR_ICC_MUTE: 242 return IFD_ERROR_NO_CARD; 243 case CCID_ERR_XFR_PARITY: 244 case CCID_ERR_OVERRUN: 245 return IFD_ERROR_COMM_ERROR; 246 case CCID_ERR_BAD_ATR_TS: 247 case CCID_ERR_BAD_ATR_TCK: 248 return IFD_ERROR_NO_ATR; 249 case CCID_ERR_PROT_NOSUP: 250 case CCID_ERR_CLASS_NOSUP: 251 return IFD_ERROR_INCOMPATIBLE_DEVICE; 252 case CCID_ERR_BAD_PROC_BYTE: 253 return IFD_ERROR_INVALID_ARG; 254 case CCID_ERR_BUSY_AUTO_SEQ: 255 case CCID_ERR_SLOT_BUSY: 256 return IFD_ERROR_TIMEOUT; 257 case CCID_ERR_PIN_TIMEOUT: 258 return IFD_ERROR_USER_TIMEOUT; 259 case CCID_ERR_PIN_CANCELED: 260 return IFD_ERROR_USER_ABORT; 261 case CCID_OFFSET_MSGTYPE: 262 return IFD_ERROR_NOT_SUPPORTED; 263 case CCID_OFFSET_SLOT: 264 return IFD_ERROR_INVALID_SLOT; 265 } 266 return IFD_ERROR_GENERIC; 238 ret = -300; 239 } 240 else { 241 switch (p[8]) { 242 case CCID_ERR_ICC_MUTE: 243 ret = IFD_ERROR_NO_CARD; 244 break; 245 case CCID_ERR_XFR_PARITY: 246 case CCID_ERR_OVERRUN: 247 ret = IFD_ERROR_COMM_ERROR; 248 break; 249 case CCID_ERR_BAD_ATR_TS: 250 case CCID_ERR_BAD_ATR_TCK: 251 ret = IFD_ERROR_NO_ATR; 252 break; 253 case CCID_ERR_PROT_NOSUP: 254 case CCID_ERR_CLASS_NOSUP: 255 ret = IFD_ERROR_INCOMPATIBLE_DEVICE; 256 break; 257 case CCID_ERR_BAD_PROC_BYTE: 258 ret = IFD_ERROR_INVALID_ARG; 259 break; 260 case CCID_ERR_BUSY_AUTO_SEQ: 261 case CCID_ERR_SLOT_BUSY: 262 ret = IFD_ERROR_TIMEOUT; 263 break; 264 case CCID_ERR_PIN_TIMEOUT: 265 ret = IFD_ERROR_USER_TIMEOUT; 266 break; 267 case CCID_ERR_PIN_CANCELED: 268 ret = IFD_ERROR_USER_ABORT; 269 break; 270 case CCID_OFFSET_MSGTYPE: 271 ret = IFD_ERROR_NOT_SUPPORTED; 272 break; 273 case CCID_OFFSET_SLOT: 274 ret = IFD_ERROR_INVALID_SLOT; 275 break; 276 default: 277 ret = IFD_ERROR_GENERIC; 278 break; 279 } 280 } 281 282 ifd_debug(1, "r: %d", ret); 283 return ret; 267 284 } 268 285 … … 276 293 if (slot >= reader->nslots) 277 294 return IFD_ERROR_INVALID_SLOT; 278 if (sendlen + 10 > outsz) /* this probably means the apdu is larger295 if (sendlen + 10 > outsz) { /* this probably means the apdu is larger 279 296 than the supported MaxMessageSize - 10 */ 297 ifd_debug(1, "error: unsupported (apdu larger than max outsz: %d, sendlen: %d)", outsz, sendlen); 280 298 return IFD_ERROR_NOT_SUPPORTED; 299 } 281 300 *p++ = cmd; 282 301 *p++ = sendlen & 0xFF; … … 1321 1340 ccid_status_t *st = (ccid_status_t *) reader->driver_data; 1322 1341 1323 ifd_debug(1, "called. ");1342 ifd_debug(1, "called. reader_type: %d, icc_proto[slot]=%d", st->reader_type, st->icc_proto[slot]); 1324 1343 if (st->reader_type == TYPE_APDU || 1325 1344 (st->reader_type == TYPE_TPDU && 1326 1345 st->icc_proto[slot] == IFD_PROTOCOL_T0)) 1327 1346 return ccid_exchange(reader, slot, sbuf, slen, rbuf, rlen); 1347 1348 ifd_debug(1, "error: unsupported (slot settings)"); 1328 1349 return IFD_ERROR_NOT_SUPPORTED; 1329 1350 } -
trunk/src/ifd/process.c
r1114 r1187 387 387 ct_tlv_builder_t * resp) 388 388 { 389 unsigned char replybuf[258 ];389 unsigned char replybuf[258+256]; 390 390 unsigned char *data; 391 391 size_t data_len;
Note: See TracChangeset
for help on using the changeset viewer.
