Chromium Code Reviews| 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(); |
| } |