status_t BnDemo::onTransact(uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) { LOGD("BnDemo::onTransact(%i) %i", code, flags); data.checkInterface(this); data.print(PLOG); endl(PLOG); switch(code) { case ALERT: { alert(); // Ignoring the fixed alert string return NO_ERROR; } break; case PUSH: { int32_t inData = data.readInt32(); LOGD("BnDemo::onTransact got %i", inData); push(inData); ASSERT(reply != 0); reply->print(PLOG); endl(PLOG); return NO_ERROR; } break; case ADD: { int32_t inV1 = data.readInt32(); int32_t inV2 = data.readInt32(); int32_t sum = add(inV1, inV2); LOGD("BnDemo::onTransact add(%i, %i) = %i", inV1, inV2, sum); ASSERT(reply != 0); reply->print(PLOG); endl(PLOG); reply->writeInt32(sum); return NO_ERROR; } break; default: return BBinder::onTransact(code, data, reply, flags); } }
status_t onTransact(void *pthis, uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) { #define GET_MEMORY 1 android::IBinder *that = (android::IBinder*)pthis; switch(code) { case GET_MEMORY: { //CHECK_INTERFACE(IMemory, data, reply); if (!data.checkInterface(that)) { return PERMISSION_DENIED; } ssize_t offset; size_t size; reply->writeStrongBinder( IInterface::asBinder(IMemory::asInterface(that)->getMemory(&offset, &size)) ); printf("%d,%d\n",offset,size); //important to OOB offset +=0x30000000; size +=0x60000000; reply->writeInt32(offset); reply->writeInt32(size); return NO_ERROR; } break; } return ((ONTRANSACT)g_original)(pthis,code,data,reply,flags); }
virtual status_t onTransact( uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags = 0) { ALOGD("enter MySetupCallback onTransact, code=%u", code); if (data.checkInterface(this)) ALOGD("checkInterface OK"); else { ALOGW("checkInterface failed"); return -1; } switch (code) { default: break; } return 0; }