Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9bd3427c authored by Venkatarama Avadhani's avatar Venkatarama Avadhani Committed by Yixiao Luo
Browse files

CAS: Add openSession with no params

Add method to open a session with no arguments.

Bug: 266169861
Test: atest CtsMediaMiscTestCases

Change-Id: I912de02407716c9a5bcd28dabfa8eb8f45aef727
parent 8bde9fed
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ package android.hardware.cas;
@VintfStability
interface ICas {
  void closeSession(in byte[] sessionId);
  byte[] openSessionDefault();
  byte[] openSession(in android.hardware.cas.SessionIntent intent, in android.hardware.cas.ScramblingMode mode);
  void processEcm(in byte[] sessionId, in byte[] ecm);
  void processEmm(in byte[] emm);
+8 −0
Original line number Diff line number Diff line
@@ -34,6 +34,14 @@ interface ICas {
     */
    void closeSession(in byte[] sessionId);

    /**
     * Open a session to descramble one or more streams without specifying intention
     * and scrambling mode.
     *
     * @return sessionId The id of the newly opened session.
     */
    byte[] openSessionDefault();

    /**
     * Open a session to descramble one or more streams by specifying intention
     * and scrambling mode.
+13 −0
Original line number Diff line number Diff line
@@ -128,6 +128,19 @@ ScopedAStatus CasImpl::setPrivateData(const vector<uint8_t>& pvtData) {
    return toStatus(holder->setPrivateData(pvtData));
}

ScopedAStatus CasImpl::openSessionDefault(vector<uint8_t>* sessionId) {
    ALOGV("%s", __FUNCTION__);

    shared_ptr<CasPlugin> holder = atomic_load(&mPluginHolder);
    status_t err = INVALID_OPERATION;
    if (holder.get() != nullptr) {
        err = holder->openSession(sessionId);
        holder.reset();
    }

    return toStatus(err);
}

ScopedAStatus CasImpl::openSession(SessionIntent intent, ScramblingMode mode,
                                   vector<uint8_t>* sessionId) {
    ALOGV("%s", __FUNCTION__);
+2 −0
Original line number Diff line number Diff line
@@ -53,6 +53,8 @@ class CasImpl : public BnCas {

    virtual ScopedAStatus setPrivateData(const vector<uint8_t>& pvtData) override;

    virtual ScopedAStatus openSessionDefault(vector<uint8_t>* sessionId) override;

    virtual ScopedAStatus openSession(SessionIntent intent, ScramblingMode mode,
                                      vector<uint8_t>* sessionId) override;

+31 −0
Original line number Diff line number Diff line
@@ -286,6 +286,7 @@ class MediaCasAidlTest : public testing::TestWithParam<string> {
    } OobInputTestParams;

    AssertionResult createCasPlugin(int32_t caSystemId);
    AssertionResult openCasSessionDefault(vector<uint8_t>* sessionId);
    AssertionResult openCasSession(vector<uint8_t>* sessionId, SessionIntent intent,
                                   ScramblingMode mode);
    AssertionResult descrambleTestInputBuffer(const shared_ptr<IDescrambler>& descrambler,
@@ -331,6 +332,10 @@ AssertionResult MediaCasAidlTest::createCasPlugin(int32_t caSystemId) {
    return AssertionResult(mDescrambler != nullptr);
}

AssertionResult MediaCasAidlTest::openCasSessionDefault(vector<uint8_t>* sessionId) {
    return AssertionResult(mMediaCas->openSessionDefault(sessionId).isOk());
}

AssertionResult MediaCasAidlTest::openCasSession(vector<uint8_t>* sessionId, SessionIntent intent,
                                                 ScramblingMode mode) {
    return AssertionResult(mMediaCas->openSession(intent, mode, sessionId).isOk());
@@ -485,6 +490,32 @@ TEST_P(MediaCasAidlTest, TestClearKeyPluginInstalled) {
    ADD_FAILURE() << "ClearKey plugin not installed";
}

TEST_P(MediaCasAidlTest, TestClearKeyDefaultSessionClosedAfterRelease) {
    description("Test that all sessions are closed after a MediaCas object is released");

    ASSERT_TRUE(createCasPlugin(CLEAR_KEY_SYSTEM_ID));

    EXPECT_TRUE(mMediaCas->provision(PROVISION_STR).isOk());

    vector<uint8_t> sessionId;
    ASSERT_TRUE(openCasSessionDefault(&sessionId));

    vector<uint8_t> streamSessionId;
    ASSERT_TRUE(openCasSessionDefault(&streamSessionId));

    EXPECT_TRUE(mMediaCas->release().isOk());

    if (mDescrambler != nullptr) {
        auto status = mDescrambler->setMediaCasSession(sessionId);
        EXPECT_FALSE(status.isOk());
        EXPECT_EQ(Status::ERROR_CAS_SESSION_NOT_OPENED, status.getServiceSpecificError());

        status = mDescrambler->setMediaCasSession(streamSessionId);
        EXPECT_FALSE(status.isOk());
        EXPECT_EQ(Status::ERROR_CAS_SESSION_NOT_OPENED, status.getServiceSpecificError());
    }
}

TEST_P(MediaCasAidlTest, TestClearKeySessionClosedAfterRelease) {
    description("Test that all sessions are closed after a MediaCas object is released");