From 10305cc672dcb39b7cc7dc03eeafffb2fea150ec Mon Sep 17 00:00:00 2001 From: Ronghua Wu Date: Sun, 22 Feb 2015 07:55:32 -0800 Subject: Add DRM session manager. Bug: 19265536 Change-Id: Ia9f2c94c64ed6c1fe99d54de81d71c8973994865 --- media/libmediaplayerservice/DrmSessionManager.h | 75 +++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 media/libmediaplayerservice/DrmSessionManager.h (limited to 'media/libmediaplayerservice/DrmSessionManager.h') diff --git a/media/libmediaplayerservice/DrmSessionManager.h b/media/libmediaplayerservice/DrmSessionManager.h new file mode 100644 index 0000000..1d0ed43 --- /dev/null +++ b/media/libmediaplayerservice/DrmSessionManager.h @@ -0,0 +1,75 @@ +/* + * 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 { + 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_ -- cgit v1.1