mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-03 22:56:33 +02:00
scd: Support multiple readers by CCID driver.
* scd/apdu.c (new_reader_slot): Lock is now in apdu_dev_list_start. (close_pcsc_reader_direct, close_ccid_reader): RDRNAME is handled... (apdu_close_reader): ... by this function now. (apdu_prepare_exit): Likewise. (open_ccid_reader): Open with dev_list. (apdu_dev_list_start, apdu_dev_list_finish): New. (apdu_open_one_reader): New. (apdu_open_reader): Support multiple readers. * scd/app.c (select_application): With SCAN, opening all readers available, and register as new APP. (app_write_learn_status): app->ref_count == 0 is valid for APP which is not yet used. (app_list_start, app_list_finish): New. * scd/ccid-driver.c (struct ccid_driver_s): Remove RID and BCD_DEVICE. Add BAI. (parse_ccid_descriptor): BCD_DEVICE is now on the arguments. (ccid_dev_scan, ccid_dev_scan_finish): New. (ccid_get_BAI, ccid_compare_BAI, ccid_open_usb_reader): New. (ccid_open_reader): Support multiple readers. (ccid_set_progress_cb, ccid_close_reader): No RID any more. -- With this change, multiple readers/tokens are supported by the internal CCID driver of GnuPG. Until the changes of upper layers (scdaemon, gpg-agent, and gpg front end), only a single reader is used, though. Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
This commit is contained in:
parent
6170eb8090
commit
8a41e73c31
6 changed files with 596 additions and 197 deletions
10
scd/apdu.h
10
scd/apdu.h
|
@ -74,6 +74,7 @@ enum {
|
|||
SW_HOST_ALREADY_CONNECTED = 0x1000f
|
||||
};
|
||||
|
||||
struct dev_list;
|
||||
|
||||
#define SW_EXACT_LENGTH_P(a) (((a)&~0xff) == SW_EXACT_LENGTH)
|
||||
|
||||
|
@ -86,8 +87,11 @@ enum {
|
|||
|
||||
gpg_error_t apdu_init (void);
|
||||
|
||||
gpg_error_t apdu_dev_list_start (const char *portstr, struct dev_list **l_p);
|
||||
void apdu_dev_list_finish (struct dev_list *l);
|
||||
|
||||
/* Note, that apdu_open_reader returns no status word but -1 on error. */
|
||||
int apdu_open_reader (const char *portstr);
|
||||
int apdu_open_reader (struct dev_list *l);
|
||||
int apdu_open_remote_reader (const char *portstr,
|
||||
const unsigned char *cookie, size_t length,
|
||||
int (*readfnc) (void *opaque,
|
||||
|
@ -117,9 +121,9 @@ int apdu_reset (int slot);
|
|||
int apdu_get_status (int slot, int hang, unsigned int *status);
|
||||
int apdu_check_pinpad (int slot, int command, pininfo_t *pininfo);
|
||||
int apdu_pinpad_verify (int slot, int class, int ins, int p0, int p1,
|
||||
pininfo_t *pininfo);
|
||||
pininfo_t *pininfo);
|
||||
int apdu_pinpad_modify (int slot, int class, int ins, int p0, int p1,
|
||||
pininfo_t *pininfo);
|
||||
pininfo_t *pininfo);
|
||||
int apdu_send_simple (int slot, int extended_mode,
|
||||
int class, int ins, int p0, int p1,
|
||||
int lc, const char *data);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue