new method reset for pcsc connections; refs #29
This commit is contained in:
33
src/pcsc.hxx
33
src/pcsc.hxx
@@ -551,6 +551,27 @@ namespace pcsc {
|
||||
// void close(const std::string& s) {
|
||||
|
||||
// }
|
||||
|
||||
/// Reset and reestablish the connection.
|
||||
/** @note You must remove all readers that have been returned by
|
||||
@ref reader(), if you have assigned them to a variable
|
||||
and stored them. Otherwise the connections will remain
|
||||
open and next access should probably fail.
|
||||
@begincode
|
||||
{
|
||||
mrw::Shared<Reader> r(c.reader(name));
|
||||
// use r
|
||||
c.reset(); // now r is invalid
|
||||
// either reassign r:
|
||||
r = c.reader(name);
|
||||
// or simply reset it
|
||||
r.reset();
|
||||
}
|
||||
// or clenaup by leaving the context of r
|
||||
@endcode */
|
||||
void reset() {
|
||||
_connectionlifetime->reset();
|
||||
}
|
||||
|
||||
//! Find all readers with a given ATR.
|
||||
/*! @param atr full or partial ATR to match to the reader's ATR
|
||||
@@ -630,7 +651,7 @@ namespace pcsc {
|
||||
public:
|
||||
//! opens connection that is closed on destruction
|
||||
ConnectionLifetime(Scope s, bool exc):
|
||||
_exc(exc), _id(0),
|
||||
_exc(exc), _id(0), _s(s),
|
||||
_state(SCardEstablishContext(s, 0, 0, &_id)) {
|
||||
CRYPTOLOG("Open Connection");
|
||||
check("establish smartcard context");
|
||||
@@ -1064,10 +1085,20 @@ namespace pcsc {
|
||||
return _readers.find(name)->second;
|
||||
}
|
||||
|
||||
/// Cleans up the readers, resets the context.
|
||||
void reset() {
|
||||
_readers.clear();
|
||||
_state = SCardReleaseContext(_id);
|
||||
check("smartcard release context");
|
||||
_state = SCardEstablishContext(_s, 0, 0, &_id);
|
||||
check("establish smartcard context");
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
bool _exc;
|
||||
SCARDCONTEXT _id;
|
||||
Scope _s;
|
||||
long _state;
|
||||
|
||||
//! Readers are closed when the last shared object is destructed
|
||||
|
Reference in New Issue
Block a user