1 // Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary 2 // source code may only be used and distributed under the Widevine Master 3 // License Agreement. 4 // 5 #ifndef CLEARKEY_MEMORY_FILE_SYSTEM_H_ 6 #define CLEARKEY_MEMORY_FILE_SYSTEM_H_ 7 8 #include <map> 9 #include <string> 10 11 #include "ClearKeyTypes.h" 12 13 namespace android { 14 namespace hardware { 15 namespace drm { 16 namespace V1_2 { 17 namespace clearkey { 18 19 // Using android file system requires clearkey plugin to update 20 // its sepolicy. However, we are unable to update sepolicy for 21 // older vendor partitions. To provide backward compatibility, 22 // clearkey plugin implements a very simple file system in memory. 23 // This memory file system does not support directory structure. 24 class MemoryFileSystem { 25 public: 26 struct MemoryFile { 27 std::string fileName; // excludes path 28 std::string content; 29 size_t fileSize; 30 getContentMemoryFile31 std::string getContent() const { return content; } getFileSizeMemoryFile32 size_t getFileSize() const { return fileSize; } setContentMemoryFile33 void setContent(const std::string& file) { content = file; } setFileNameMemoryFile34 void setFileName(const std::string& name) { fileName = name; } setFileSizeMemoryFile35 void setFileSize(size_t size) { 36 content.resize(size); fileSize = size; 37 } 38 }; 39 MemoryFileSystem()40 MemoryFileSystem() {}; ~MemoryFileSystem()41 virtual ~MemoryFileSystem() {}; 42 43 bool FileExists(const std::string& fileName) const; 44 ssize_t GetFileSize(const std::string& fileName) const; 45 std::vector<std::string> ListFiles() const; 46 size_t Read(const std::string& pathName, std::string* buffer); 47 bool RemoveAllFiles(); 48 bool RemoveFile(const std::string& fileName); 49 size_t Write(const std::string& pathName, const MemoryFile& memoryFile); 50 51 private: 52 // License file name is made up of a unique keySetId, therefore, 53 // the filename can be used as the key to locate licenses in the 54 // memory file system. 55 std::map<std::string, MemoryFile> mMemoryFileSystem; 56 57 std::string GetFileName(const std::string& path); 58 59 CLEARKEY_DISALLOW_COPY_AND_ASSIGN(MemoryFileSystem); 60 }; 61 62 } // namespace clearkey 63 } // namespace V1_2 64 } // namespace drm 65 } // namespace hardware 66 } // namespace android 67 68 #endif // CLEARKEY_MEMORY_FILE_SYSTEM_H_ 69