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

Commit 0abeaca9 authored by Gene Morgan's avatar Gene Morgan Committed by Jeff Tinker
Browse files

Allow DRM client to pass the FD of an open file to the DRM server.

Part of CL https://googleplex-android-review.googlesource.com/#/c/222797/
This modifies the marshall/unmarshall of IDrmManagerService::
acquireDrmInfo() to watch for DrmInfoRequest tag "FileDescriptorKey".
If tag is present convert string to binary FD, then back to string
after passage through the interface's Binder.

Relevant bug reports:
bug: 6426185

Change-Id: I63748b7c986ca0a89613ed3f1c81f24cffb7a9b2
parent 74e58c55
Loading
Loading
Loading
Loading
+16 −4
Original line number Diff line number Diff line
@@ -310,8 +310,14 @@ DrmInfo* BpDrmManagerService::acquireDrmInfo(int uniqueId, const DrmInfoRequest*
        const String8 key = keyIt.next();
        data.writeString8(key);
        const String8 value = drmInforequest->get(key);
        if (key == String8("FileDescriptorKey")) {
            int fd = -1;
            sscanf(value.string(), "FileDescriptor[%d]", &fd);
            data.writeFileDescriptor(fd);
        } else {
            data.writeString8((value == String8("")) ? String8("NULL") : value);
        }
    }

    remote()->transact(ACQUIRE_DRM_INFO, data, &reply);

@@ -1002,9 +1008,16 @@ status_t BnDrmManagerService::onTransact(
        const int size = data.readInt32();
        for (int index = 0; index < size; ++index) {
            const String8 key(data.readString8());
            if (key == String8("FileDescriptorKey")) {
                char buffer[16];
                int fd = data.readFileDescriptor();
                sprintf(buffer, "%lu", (unsigned long)fd);
                drmInfoRequest->put(key, String8(buffer));
            } else {
                const String8 value(data.readString8());
                drmInfoRequest->put(key, (value == String8("NULL")) ? String8("") : value);
            }
        }

        DrmInfo* drmInfo = acquireDrmInfo(uniqueId, drmInfoRequest);

@@ -1505,4 +1518,3 @@ status_t BnDrmManagerService::onTransact(
        return BBinder::onTransact(code, data, reply, flags);
    }
}