1 /*
2  * Copyright (C) 2021 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 #pragma once
17 
18 #include <utils/Mutex.h>
19 #include <utils/RefBase.h>
20 
21 #include "ClearKeyTypes.h"
22 #include "Session.h"
23 
24 namespace clearkeydrm {
25 
26 class SessionLibrary {
27   public:
28     static SessionLibrary* get();
29 
30     ::android::sp<Session> createSession();
31 
32     ::android::sp<Session> findSession(const std::vector<uint8_t>& sessionId);
33 
34     void destroySession(const ::android::sp<Session>& session);
35 
numOpenSessions()36     size_t numOpenSessions() const { return mSessions.size(); }
37 
38   private:
39     CLEARKEY_DISALLOW_COPY_AND_ASSIGN(SessionLibrary);
40 
SessionLibrary()41     SessionLibrary() : mNextSessionId(1) {}
42 
43     static ::android::Mutex sSingletonLock;
44     static SessionLibrary* sSingleton;
45 
46     ::android::Mutex mSessionsLock;
47     uint32_t mNextSessionId;
48     std::map<std::vector<uint8_t>, ::android::sp<Session>> mSessions;
49 };
50 
51 }  // namespace clearkeydrm
52