From 2db8455d8f4468a637109d31f319ce02d9d743ec Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Thu, 28 Jan 2010 11:19:57 -0800 Subject: API Extension: Support for optionally specifying a map of extra request headers when specifying the uri of media data to be played. related-to-bug: 2393577 Original change by Andrei Popescu --- media/libmedia/IMediaPlayerService.cpp | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) (limited to 'media/libmedia/IMediaPlayerService.cpp') diff --git a/media/libmedia/IMediaPlayerService.cpp b/media/libmedia/IMediaPlayerService.cpp index cca3e9b..71c5f86 100644 --- a/media/libmedia/IMediaPlayerService.cpp +++ b/media/libmedia/IMediaPlayerService.cpp @@ -56,13 +56,26 @@ public: return interface_cast(reply.readStrongBinder()); } - virtual sp create(pid_t pid, const sp& client, const char* url) - { + virtual sp create( + pid_t pid, const sp& client, + const char* url, const KeyedVector *headers) { Parcel data, reply; data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); data.writeInt32(pid); data.writeStrongBinder(client->asBinder()); data.writeCString(url); + + if (headers == NULL) { + data.writeInt32(0); + } else { + // serialize the headers + data.writeInt32(headers->size()); + for (size_t i = 0; i < headers->size(); ++i) { + data.writeString8(headers->keyAt(i)); + data.writeString8(headers->valueAt(i)); + } + } + remote()->transact(CREATE_URL, data, &reply); return interface_cast(reply.readStrongBinder()); } @@ -142,9 +155,21 @@ status_t BnMediaPlayerService::onTransact( case CREATE_URL: { CHECK_INTERFACE(IMediaPlayerService, data, reply); pid_t pid = data.readInt32(); - sp client = interface_cast(data.readStrongBinder()); + sp client = + interface_cast(data.readStrongBinder()); const char* url = data.readCString(); - sp player = create(pid, client, url); + + KeyedVector headers; + int32_t numHeaders = data.readInt32(); + for (int i = 0; i < numHeaders; ++i) { + String8 key = data.readString8(); + String8 value = data.readString8(); + headers.add(key, value); + } + + sp player = create( + pid, client, url, numHeaders > 0 ? &headers : NULL); + reply->writeStrongBinder(player->asBinder()); return NO_ERROR; } break; -- cgit v1.1