Index: crypto_pkcs11.cc |
diff --git a/crypto_pkcs11.cc b/crypto_pkcs11.cc |
index a31aeb940a1e882f3b68478dbf8a4855d09cde42..246b1deb8cdbf93723927eb6bc3c6a2f47661454 100644 |
--- a/crypto_pkcs11.cc |
+++ b/crypto_pkcs11.cc |
@@ -499,6 +499,8 @@ bool Pkcs11::Session::InitializeTemplate( |
BindMethod(instance_t, &Pkcs11::Session::FindObjects, "findObjects"); |
BindMethod(instance_t, &Pkcs11::Session::CreateObject, "createObject"); |
+ BindMethod(instance_t, &Pkcs11::Session::LogoutAndClose, "logoutAndClose"); |
+ |
return true; |
} |
@@ -543,6 +545,11 @@ v8::Handle<v8::Value> Pkcs11::Session::Close(const v8::Arguments& args) { |
if (!session_handle_) |
return ThrowException("Not open"); |
+ if (logged_in_) { |
+ OkOrThrow(C_Logout(session_handle_)); |
rginda
2011/01/18 22:10:19
You should return early if this throws.
Nelson Araujo
2011/01/18 22:50:19
Done.
|
+ logged_in_ = false; |
+ } |
+ |
OkOrThrow(C_CloseSession(session_handle_)); |
session_handle_ = 0; |
return v8::Undefined(); |
@@ -561,6 +568,8 @@ v8::Handle<v8::Value> Pkcs11::Session::Login(const v8::Arguments& args) { |
v8::String::AsciiValue ascii_pin(args[1]); |
+ logged_in_ = false; |
+ |
CK_RV rv = C_Login(session_handle_, user_type, |
reinterpret_cast<CK_CHAR_PTR>(*ascii_pin), |
ascii_pin.length()); |
@@ -571,11 +580,20 @@ v8::Handle<v8::Value> Pkcs11::Session::Login(const v8::Arguments& args) { |
if (!OkOrThrow(rv)) |
return v8::Undefined(); |
+ logged_in_ = true; |
return v8::True(); |
} |
v8::Handle<v8::Value> Pkcs11::Session::Logout(const v8::Arguments& args) { |
OkOrThrow(C_Logout(session_handle_)); |
+ logged_in_ = false; |
+ return v8::Undefined(); |
+} |
+ |
+v8::Handle<v8::Value> Pkcs11::Session::LogoutAndClose( |
+ const v8::Arguments& args) { |
+ Logout(args); |
+ Close(args); |
return v8::Undefined(); |
} |