Home | History | Annotate | Download | only in mock
      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 
     29 MockSessionLibrary* 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 
     40 MockSessionLibrary::MockSessionLibrary() : mNextSessionId(1) {}
     41 
     42 status_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 
     59 sp<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 
     70 void 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 
     82 void 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