/* * 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 #include #include #include #include #include #include #include namespace android { class DrmSessionManagerTest; using aidl::android::media::IResourceManagerClient; using aidl::android::media::IResourceManagerService; bool isEqualSessionId(const Vector &sessionId1, const Vector &sessionId2); struct SessionInfo { pid_t pid; uid_t uid; int64_t clientId; }; typedef std::map, SessionInfo> SessionInfoMap; struct DrmSessionManager : public RefBase { static sp Instance(); DrmSessionManager(); explicit DrmSessionManager(const std::shared_ptr &service); void addSession(int pid, const std::shared_ptr& drm, const Vector& sessionId); void useSession(const Vector& sessionId); void removeSession(const Vector& sessionId); bool reclaimSession(int callingPid); // inspection APIs size_t getSessionCount() const; bool containsSession(const Vector& sessionId) const; // implements DeathRecipient void binderDied(); protected: virtual ~DrmSessionManager(); private: void init(); std::shared_ptr mService; mutable Mutex mLock; SessionInfoMap mSessionMap; bool mInitialized; ::ndk::ScopedAIBinder_DeathRecipient mDeathRecipient; DISALLOW_EVIL_CONSTRUCTORS(DrmSessionManager); }; } // namespace android #endif // DRM_SESSION_MANAGER_H_