/* * Copyright (C) 2015 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef DRM_SESSION_MANAGER_H_ #define DRM_SESSION_MANAGER_H_ #include #include #include #include #include namespace android { class DrmSessionManagerTest; struct DrmSessionClientInterface; struct ProcessInfoInterface; bool isEqualSessionId(const Vector &sessionId1, const Vector &sessionId2); struct SessionInfo { sp drm; Vector sessionId; int64_t timeStamp; }; typedef Vector SessionInfos; typedef KeyedVector PidSessionInfosMap; struct DrmSessionManager : public RefBase { static sp Instance(); DrmSessionManager(); DrmSessionManager(sp processInfo); void addSession(int pid, sp drm, const Vector& sessionId); void useSession(const Vector& sessionId); void removeSession(const Vector& sessionId); void removeDrm(sp drm); bool reclaimSession(int callingPid); protected: virtual ~DrmSessionManager(); private: friend class DrmSessionManagerTest; int64_t getTime_l(); bool getLowestPriority_l(int* lowestPriorityPid, int* lowestPriority); bool getLeastUsedSession_l( int pid, sp* drm, Vector* sessionId); sp mProcessInfo; mutable Mutex mLock; PidSessionInfosMap mSessionMap; int64_t mTime; DISALLOW_EVIL_CONSTRUCTORS(DrmSessionManager); }; } // namespace android #endif // DRM_SESSION_MANAGER_H_