/* * Copyright 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include #include #define LOG_TAG "VtsFuzzerBinderService" #include #include #include #include #include #include #include #include #include "binder/VtsFuzzerBinderService.h" #include "utils/InterfaceSpecUtil.h" using namespace std; namespace android { namespace vts { IMPLEMENT_META_INTERFACE(VtsFuzzer, VTS_FUZZER_BINDER_SERVICE_NAME); void BpVtsFuzzer::Exit() { Parcel data; Parcel reply; data.writeInterfaceToken(IVtsFuzzer::getInterfaceDescriptor()); data.writeString16(String16("Exit code")); remote()->transact(EXIT, data, &reply, IBinder::FLAG_ONEWAY); } int32_t BpVtsFuzzer::LoadHal(const string& path, int target_class, int target_type, int target_version_major, int target_version_minor, const string& module_name) { Parcel data; Parcel reply; printf("agent->driver: LoadHal(%s, %d, %d, %s, %s)\n", path.c_str(), target_class, target_type, GetVersionString(target_version_major, target_version_minor).c_str(), module_name.c_str()); data.writeInterfaceToken(IVtsFuzzer::getInterfaceDescriptor()); data.writeCString(path.c_str()); data.writeInt32(target_class); data.writeInt32(target_type); data.writeInt32(target_version_major); data.writeInt32(target_version_minor); data.writeCString(module_name.c_str()); #ifdef VTS_FUZZER_BINDER_DEBUG alog << "BpVtsFuzzer::Status request parcel:\n" << data << endl; #endif remote()->transact(LOAD_HAL, data, &reply); #ifdef VTS_FUZZER_BINDER_DEBUG alog << "BpVtsFuzzer::Status response parcel:\n" << reply << endl; #endif int32_t res; status_t status = reply.readInt32(&res); printf("driver->agent: LoadHal returns %d\n", status); return res; } int32_t BpVtsFuzzer::Status(int32_t type) { Parcel data; Parcel reply; data.writeInterfaceToken(IVtsFuzzer::getInterfaceDescriptor()); data.writeInt32(type); #ifdef VTS_FUZZER_BINDER_DEBUG alog << "BpVtsFuzzer::Status request parcel:\n" << data << endl; #endif remote()->transact(STATUS, data, &reply); #ifdef VTS_FUZZER_BINDER_DEBUG alog << "BpVtsFuzzer::Status response parcel:\n" << reply << endl; #endif int32_t res; /* status_t */ reply.readInt32(&res); return res; } string BpVtsFuzzer::Call(const string& call_payload) { Parcel data, reply; data.writeInterfaceToken(IVtsFuzzer::getInterfaceDescriptor()); data.writeCString(call_payload.c_str()); #ifdef VTS_FUZZER_BINDER_DEBUG alog << data << endl; #endif remote()->transact(CALL, data, &reply); #ifdef VTS_FUZZER_BINDER_DEBUG alog << reply << endl; #endif const char* res = reply.readCString(); if (res == NULL) { printf("reply == NULL\n"); return res; } printf("len(reply) = %zu\n", strlen(res)); return {res}; } const char* BpVtsFuzzer::GetFunctions() { Parcel data, reply; data.writeInterfaceToken(IVtsFuzzer::getInterfaceDescriptor()); #ifdef VTS_FUZZER_BINDER_DEBUG alog << data << endl; #endif remote()->transact(GET_FUNCTIONS, data, &reply); #ifdef VTS_FUZZER_BINDER_DEBUG alog << reply << endl; #endif const char* res = reply.readCString(); if (res == NULL) { printf("reply == NULL\n"); return res; } printf("len(reply) = %zu\n", strlen(res)); return res; } } // namespace vts } // namespace android