1791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang/*
2791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang * Copyright (C) 2017 The Android Open Source Project
3791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang *
4791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang * Licensed under the Apache License, Version 2.0 (the "License");
5791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang * you may not use this file except in compliance with the License.
6791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang * You may obtain a copy of the License at
7791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang *
8791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang *      http://www.apache.org/licenses/LICENSE-2.0
9791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang *
10791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang * Unless required by applicable law or agreed to in writing, software
11791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang * distributed under the License is distributed on an "AS IS" BASIS,
12791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang * See the License for the specific language governing permissions and
14791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang * limitations under the License.
15791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang */
16791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
17791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang#ifndef MOCK_CAS_PLUGIN_H_
18791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang#define MOCK_CAS_PLUGIN_H_
19791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
20791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang#include <media/cas/CasAPI.h>
21791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang#include <media/cas/DescramblerAPI.h>
22791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang#include <utils/Mutex.h>
23791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
24791a1a206b56be8601a6fffd2614926e67d64790Chong Zhangextern "C" {
25791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang      android::CasFactory *createCasFactory();
26791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang      android::DescramblerFactory *createDescramblerFactory();
27791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang}
28791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
29791a1a206b56be8601a6fffd2614926e67d64790Chong Zhangnamespace android {
30791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
31791a1a206b56be8601a6fffd2614926e67d64790Chong Zhangclass MockCasFactory : public CasFactory {
32791a1a206b56be8601a6fffd2614926e67d64790Chong Zhangpublic:
33791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    MockCasFactory() {}
34791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    virtual ~MockCasFactory() {}
35791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
36791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    virtual bool isSystemIdSupported(
37791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang            int32_t CA_system_id) const override;
38791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    virtual status_t queryPlugins(
39791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang            std::vector<CasPluginDescriptor> *descriptors) const override;
40791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    virtual status_t createPlugin(
41791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang            int32_t CA_system_id,
42791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang            uint64_t appData,
43791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang            CasPluginCallback callback,
44791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang            CasPlugin **plugin) override;
45791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang};
46791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
47791a1a206b56be8601a6fffd2614926e67d64790Chong Zhangclass MockDescramblerFactory : public DescramblerFactory {
48791a1a206b56be8601a6fffd2614926e67d64790Chong Zhangpublic:
49791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    MockDescramblerFactory() {}
50791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    virtual ~MockDescramblerFactory() {}
51791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
52791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    virtual bool isSystemIdSupported(
53791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang            int32_t CA_system_id) const override;
54791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    virtual status_t createPlugin(
55791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang            int32_t CA_system_id, DescramblerPlugin **plugin) override;
56791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang};
57791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
58791a1a206b56be8601a6fffd2614926e67d64790Chong Zhangclass MockCasPlugin : public CasPlugin {
59791a1a206b56be8601a6fffd2614926e67d64790Chong Zhangpublic:
60791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    MockCasPlugin();
61791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    virtual ~MockCasPlugin();
62791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
63791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    virtual status_t setPrivateData(
64791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang            const CasData &data) override;
65791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
66a78c1cc9773532b1f9d066ed8fa0d9414c1bb8bbChong Zhang    virtual status_t openSession(CasSessionId *sessionId) override;
67791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
68791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    virtual status_t closeSession(
69791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang            const CasSessionId &sessionId) override;
70791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
71791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    virtual status_t setSessionPrivateData(
72791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang            const CasSessionId &sessionId,
73791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang            const CasData &data) override;
74791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
75791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    virtual status_t processEcm(
76791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang            const CasSessionId &sessionId, const CasEcm &ecm) override;
77791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
78791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    virtual status_t processEmm(const CasEmm &emm) override;
79791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
80791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    virtual status_t sendEvent(
81791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang            int32_t event, int32_t arg, const CasData &eventData) override;
82791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
83791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    virtual status_t provision(const String8 &str) override;
84791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
85791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    virtual status_t refreshEntitlements(
86791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang            int32_t refreshType, const CasData &refreshData) override;
87791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
88791a1a206b56be8601a6fffd2614926e67d64790Chong Zhangprivate:
89791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
90791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    Mutex mLock;
91791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang};
92791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
93791a1a206b56be8601a6fffd2614926e67d64790Chong Zhangclass MockDescramblerPlugin : public DescramblerPlugin {
94791a1a206b56be8601a6fffd2614926e67d64790Chong Zhangpublic:
95791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    MockDescramblerPlugin() {}
96791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    virtual ~MockDescramblerPlugin() {};
97791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
98791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    virtual bool requiresSecureDecoderComponent(
99791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang            const char *mime) const override;
100791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
101791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    virtual status_t setMediaCasSession(
102791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang            const CasSessionId &sessionId) override;
103791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
104791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    virtual ssize_t descramble(
105791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang            bool secure,
106791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang            ScramblingControl scramblingControl,
107791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang            size_t numSubSamples,
108791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang            const SubSample *subSamples,
109791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang            const void *srcPtr,
110791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang            int32_t srcOffset,
111791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang            void *dstPtr,
112791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang            int32_t dstOffset,
113791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang            AString *errorDetailMsg) override;
114791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
115791a1a206b56be8601a6fffd2614926e67d64790Chong Zhangprivate:
116791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    String8 subSamplesToString(
117791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang            SubSample const *subSamples,
118791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang            size_t numSubSamples) const;
119791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    String8 arrayToString(uint8_t const *array, size_t len) const;
120791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang};
121791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang} // namespace android
122791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
123791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang#endif // MOCK_CAS_PLUGIN_H_
124