diff options
author | NIIBE Yutaka <[email protected]> | 2017-01-06 00:14:13 +0000 |
---|---|---|
committer | NIIBE Yutaka <[email protected]> | 2017-01-06 00:47:31 +0000 |
commit | 8a41e73c31adb86d4a7dca4da695e5ad1347811f (patch) | |
tree | 2524a19140709697330b279806b63b4234db24f8 /scd/apdu.h | |
parent | Silence two -Wlogical-op warnings. (diff) | |
download | gnupg-8a41e73c31adb86d4a7dca4da695e5ad1347811f.tar.gz gnupg-8a41e73c31adb86d4a7dca4da695e5ad1347811f.zip |
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 <[email protected]>
Diffstat (limited to 'scd/apdu.h')
-rw-r--r-- | scd/apdu.h | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/scd/apdu.h b/scd/apdu.h index 3021cf7a5..473def518 100644 --- a/scd/apdu.h +++ b/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); |