diff options
Diffstat (limited to 'libs/binder/Binder.cpp')
-rw-r--r-- | libs/binder/Binder.cpp | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/libs/binder/Binder.cpp b/libs/binder/Binder.cpp index e39093d52e..c459d3f096 100644 --- a/libs/binder/Binder.cpp +++ b/libs/binder/Binder.cpp @@ -20,6 +20,7 @@ #include <utils/misc.h> #include <binder/BpBinder.h> #include <binder/IInterface.h> +#include <binder/IResultReceiver.h> #include <binder/Parcel.h> #include <stdio.h> @@ -59,6 +60,19 @@ bool IBinder::checkSubclass(const void* /*subclassID*/) const return false; } + +status_t IBinder::shellCommand(int /*in*/, int out, int /*err*/, Vector<String16>& /*args*/, + const sp<IResultReceiver>& resultReceiver) +{ + if (out >= 0) { + dprintf(out, "Shell commands not supported.\n"); + } + if (resultReceiver != NULL) { + resultReceiver->send(INVALID_OPERATION); + } + return NO_ERROR; +} + // --------------------------------------------------------------------------- class BBinder::Extras @@ -129,7 +143,7 @@ status_t BBinder::unlinkToDeath( return INVALID_OPERATION; } - status_t BBinder::dump(int /*fd*/, const Vector<String16>& /*args*/) +status_t BBinder::dump(int /*fd*/, const Vector<String16>& /*args*/) { return NO_ERROR; } @@ -204,6 +218,21 @@ status_t BBinder::onTransact( return dump(fd, args); } + case SHELL_COMMAND_TRANSACTION: { + int in = data.readFileDescriptor(); + int out = data.readFileDescriptor(); + int err = data.readFileDescriptor(); + int argc = data.readInt32(); + Vector<String16> args; + for (int i = 0; i < argc && data.dataAvail() > 0; i++) { + args.add(data.readString16()); + } + sp<IResultReceiver> resultReceiver = IResultReceiver::asInterface( + data.readStrongBinder()); + + return shellCommand(in, out, err, args, resultReceiver); + } + case SYSPROPS_TRANSACTION: { report_sysprop_change(); return NO_ERROR; |