1 /* 2 * Copyright (C) 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 //#define LOG_NDEBUG 0 18 #define LOG_TAG "MockSessionLibrary" 19 20 #include <utils/Log.h> 21 #include <utils/String8.h> 22 #include "MockSessionLibrary.h" 23 24 namespace android { 25 26 Mutex MockSessionLibrary::sSingletonLock; 27 MockSessionLibrary* MockSessionLibrary::sSingleton = NULL; 28 get()29MockSessionLibrary* MockSessionLibrary::get() { 30 Mutex::Autolock lock(sSingletonLock); 31 32 if (sSingleton == NULL) { 33 ALOGD("Instantiating Session Library Singleton."); 34 sSingleton = new MockSessionLibrary(); 35 } 36 37 return sSingleton; 38 } 39 MockSessionLibrary()40MockSessionLibrary::MockSessionLibrary() : mNextSessionId(1) {} 41 addSession(CasPlugin * plugin,CasSessionId * sessionId)42status_t MockSessionLibrary::addSession( 43 CasPlugin *plugin, CasSessionId *sessionId) { 44 Mutex::Autolock lock(mSessionsLock); 45 46 sp<MockCasSession> session = new MockCasSession(plugin); 47 48 uint8_t *byteArray = (uint8_t *) &mNextSessionId; 49 sessionId->push_back(byteArray[3]); 50 sessionId->push_back(byteArray[2]); 51 sessionId->push_back(byteArray[1]); 52 sessionId->push_back(byteArray[0]); 53 mNextSessionId++; 54 55 mIDToSessionMap.add(*sessionId, session); 56 return OK; 57 } 58 findSession(const CasSessionId & sessionId)59sp<MockCasSession> MockSessionLibrary::findSession( 60 const CasSessionId& sessionId) { 61 Mutex::Autolock lock(mSessionsLock); 62 63 ssize_t index = mIDToSessionMap.indexOfKey(sessionId); 64 if (index < 0) { 65 return NULL; 66 } 67 return mIDToSessionMap.valueFor(sessionId); 68 } 69 destroySession(const CasSessionId & sessionId)70void MockSessionLibrary::destroySession(const CasSessionId& sessionId) { 71 Mutex::Autolock lock(mSessionsLock); 72 73 ssize_t index = mIDToSessionMap.indexOfKey(sessionId); 74 if (index < 0) { 75 return; 76 } 77 78 sp<MockCasSession> session = mIDToSessionMap.valueAt(index); 79 mIDToSessionMap.removeItemsAt(index); 80 } 81 destroyPlugin(CasPlugin * plugin)82void MockSessionLibrary::destroyPlugin(CasPlugin *plugin) { 83 Mutex::Autolock lock(mSessionsLock); 84 85 for (ssize_t index = mIDToSessionMap.size() - 1; index >= 0; index--) { 86 sp<MockCasSession> session = mIDToSessionMap.valueAt(index); 87 if (session->getPlugin() == plugin) { 88 mIDToSessionMap.removeItemsAt(index); 89 } 90 } 91 } 92 93 } // namespace android 94