diff options
Diffstat (limited to 'drm/common/IDrmServiceListener.cpp')
-rw-r--r-- | drm/common/IDrmServiceListener.cpp | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/drm/common/IDrmServiceListener.cpp b/drm/common/IDrmServiceListener.cpp index 6eeea40..d825afb 100644 --- a/drm/common/IDrmServiceListener.cpp +++ b/drm/common/IDrmServiceListener.cpp @@ -32,6 +32,19 @@ status_t BpDrmServiceListener::notify(const DrmInfoEvent& event) { data.writeInt32(event.getType()); data.writeString8(event.getMessage()); + data.writeInt32(event.getCount()); + DrmInfoEvent::KeyIterator keyIt = event.keyIterator(); + while (keyIt.hasNext()) { + String8 key = keyIt.next(); + data.writeString8(key); + data.writeString8(event.get(key)); + } + const DrmBuffer& value = event.getData(); + data.writeInt32(value.length); + if (value.length > 0) { + data.write(value.data, value.length); + } + remote()->transact(NOTIFY, data, &reply); return reply.readInt32(); } @@ -49,7 +62,24 @@ status_t BnDrmServiceListener::onTransact( int type = data.readInt32(); const String8& message = data.readString8(); - status_t status = notify(DrmInfoEvent(uniqueId, type, message)); + DrmInfoEvent event(uniqueId, type, message); + int size = data.readInt32(); + for (int index = 0; index < size; index++) { + String8 key(data.readString8()); + String8 value(data.readString8()); + event.put(key, value); + } + int valueSize = data.readInt32(); + if (valueSize > 0) { + char* valueData = new char[valueSize]; + data.read(valueData, valueSize); + DrmBuffer drmBuffer(valueData, valueSize); + event.setData(drmBuffer); + delete[] valueData; + } + + status_t status = notify(event); + reply->writeInt32(status); return DRM_NO_ERROR; |