Line data Source code
1 : #include "WidevineFileIO.h"
2 : #include "WidevineUtils.h"
3 : #include "WidevineAdapter.h"
4 :
5 : using namespace cdm;
6 :
7 : namespace mozilla {
8 :
9 : void
10 0 : WidevineFileIO::Open(const char* aFilename, uint32_t aFilenameLength)
11 : {
12 0 : mName = std::string(aFilename, aFilename + aFilenameLength);
13 0 : GMPRecord* record = nullptr;
14 0 : GMPErr err = GMPCreateRecord(aFilename, aFilenameLength, &record, static_cast<GMPRecordClient*>(this));
15 0 : if (GMP_FAILED(err)) {
16 0 : CDM_LOG("WidevineFileIO::Open() '%s' GMPCreateRecord failed", mName.c_str());
17 0 : mClient->OnOpenComplete(FileIOClient::kError);
18 0 : return;
19 : }
20 0 : if (GMP_FAILED(record->Open())) {
21 0 : CDM_LOG("WidevineFileIO::Open() '%s' record open failed", mName.c_str());
22 0 : mClient->OnOpenComplete(FileIOClient::kError);
23 0 : return;
24 : }
25 :
26 0 : CDM_LOG("WidevineFileIO::Open() '%s'", mName.c_str());
27 0 : mRecord = record;
28 : }
29 :
30 : void
31 0 : WidevineFileIO::Read()
32 : {
33 0 : if (!mRecord) {
34 0 : CDM_LOG("WidevineFileIO::Read() '%s' used uninitialized!", mName.c_str());
35 0 : mClient->OnReadComplete(FileIOClient::kError, nullptr, 0);
36 0 : return;
37 : }
38 0 : CDM_LOG("WidevineFileIO::Read() '%s'", mName.c_str());
39 0 : mRecord->Read();
40 : }
41 :
42 : void
43 0 : WidevineFileIO::Write(const uint8_t* aData, uint32_t aDataSize)
44 : {
45 0 : if (!mRecord) {
46 0 : CDM_LOG("WidevineFileIO::Write() '%s' used uninitialized!", mName.c_str());
47 0 : mClient->OnWriteComplete(FileIOClient::kError);
48 0 : return;
49 : }
50 0 : mRecord->Write(aData, aDataSize);
51 : }
52 :
53 : void
54 0 : WidevineFileIO::Close()
55 : {
56 0 : CDM_LOG("WidevineFileIO::Close() '%s'", mName.c_str());
57 0 : if (mRecord) {
58 0 : mRecord->Close();
59 0 : mRecord = nullptr;
60 : }
61 0 : delete this;
62 0 : }
63 :
64 : static FileIOClient::Status
65 0 : GMPToWidevineFileStatus(GMPErr aStatus)
66 : {
67 0 : switch (aStatus) {
68 0 : case GMPRecordInUse: return FileIOClient::kInUse;
69 0 : case GMPNoErr: return FileIOClient::kSuccess;
70 0 : default: return FileIOClient::kError;
71 : }
72 : }
73 :
74 : void
75 0 : WidevineFileIO::OpenComplete(GMPErr aStatus)
76 : {
77 0 : CDM_LOG("WidevineFileIO::OpenComplete() '%s' status=%d", mName.c_str(), aStatus);
78 0 : mClient->OnOpenComplete(GMPToWidevineFileStatus(aStatus));
79 0 : }
80 :
81 : void
82 0 : WidevineFileIO::ReadComplete(GMPErr aStatus,
83 : const uint8_t* aData,
84 : uint32_t aDataSize)
85 : {
86 0 : CDM_LOG("WidevineFileIO::OnReadComplete() '%s' status=%d", mName.c_str(), aStatus);
87 0 : mClient->OnReadComplete(GMPToWidevineFileStatus(aStatus), aData, aDataSize);
88 0 : }
89 :
90 : void
91 0 : WidevineFileIO::WriteComplete(GMPErr aStatus)
92 : {
93 0 : CDM_LOG("WidevineFileIO::WriteComplete() '%s' status=%d", mName.c_str(), aStatus);
94 0 : mClient->OnWriteComplete(GMPToWidevineFileStatus(aStatus));
95 0 : }
96 :
97 : } // namespace mozilla
|