- Timestamp:
- 01/09/12 22:23:29 (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
r1187 r1188 228 228 { 229 229 unsigned char *p = (unsigned char *)status; 230 int ret; 231 232 if ((p[7] >> 6 & 3) == 0) { 233 ret = 0; 234 } 230 231 if ((p[7] >> 6 & 3) == 0) 232 return 0; 233 235 234 /* XXX */ 236 elseif ((p[7] >> 6 & 3) == 2) {235 if ((p[7] >> 6 & 3) == 2) { 237 236 /*ct_error("card requests more time"); */ 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; 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; 284 267 } 285 268 … … 293 276 if (slot >= reader->nslots) 294 277 return IFD_ERROR_INVALID_SLOT; 295 if (sendlen + 10 > outsz) {/* this probably means the apdu is larger278 if (sendlen + 10 > outsz) /* this probably means the apdu is larger 296 279 than the supported MaxMessageSize - 10 */ 297 ifd_debug(1, "error: unsupported (apdu larger than max outsz: %d, sendlen: %d)", outsz, sendlen);298 280 return IFD_ERROR_NOT_SUPPORTED; 299 }300 281 *p++ = cmd; 301 282 *p++ = sendlen & 0xFF; … … 1340 1321 ccid_status_t *st = (ccid_status_t *) reader->driver_data; 1341 1322 1342 ifd_debug(1, "called. reader_type: %d, icc_proto[slot]=%d", st->reader_type, st->icc_proto[slot]);1323 ifd_debug(1, "called."); 1343 1324 if (st->reader_type == TYPE_APDU || 1344 1325 (st->reader_type == TYPE_TPDU && 1345 1326 st->icc_proto[slot] == IFD_PROTOCOL_T0)) 1346 1327 return ccid_exchange(reader, slot, sbuf, slen, rbuf, rlen); 1347 1348 ifd_debug(1, "error: unsupported (slot settings)");1349 1328 return IFD_ERROR_NOT_SUPPORTED; 1350 1329 } -
trunk/src/ifd/process.c
r1187 r1188 387 387 ct_tlv_builder_t * resp) 388 388 { 389 unsigned char replybuf[258 +256];389 unsigned char replybuf[258]; 390 390 unsigned char *data; 391 391 size_t data_len;
Note: See TracChangeset
for help on using the changeset viewer.
