aidl_test_service.cpp revision 389781f56bb6b4363e9eb03acf915ba297f607d5
1b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley/* 2b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley * Copyright (C) 2015 The Android Open Source Project 3b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley * 4b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley * Licensed under the Apache License, Version 2.0 (the "License"); 5b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley * you may not use this file except in compliance with the License. 6b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley * You may obtain a copy of the License at 7b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley * 8b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley * http://www.apache.org/licenses/LICENSE-2.0 9b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley * 10b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley * Unless required by applicable law or agreed to in writing, software 11b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley * distributed under the License is distributed on an "AS IS" BASIS, 12b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley * See the License for the specific language governing permissions and 14b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley * limitations under the License. 15b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley */ 16b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley 17389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin#include <map> 18d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley#include <sstream> 19d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley#include <string> 208949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley#include <vector> 21d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley 22b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley#include <binder/IInterface.h> 23b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley#include <binder/IPCThreadState.h> 24b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley#include <binder/IServiceManager.h> 25b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley#include <binder/ProcessState.h> 26b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley#include <utils/Errors.h> 27b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley#include <utils/Log.h> 28b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley#include <utils/Looper.h> 29b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley#include <utils/StrongPointer.h> 30b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley 31521bb618fa16d0b88ae88b8dcd98b72e579f1ed4Christopher Wiley#include "android/aidl/tests/BnTestService.h" 32521bb618fa16d0b88ae88b8dcd98b72e579f1ed4Christopher Wiley#include "android/aidl/tests/ITestService.h" 33b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley 34389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin#include "android/aidl/tests/BnNamedCallback.h" 35389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin#include "android/aidl/tests/INamedCallback.h" 36389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin 37b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley// Used implicitly. 38b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley#undef LOG_TAG 3933ad81e306649cb769e02d10ccf77520b68c7742Christopher Wiley#define LOG_TAG "aidl_native_service" 40b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley 41b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley// libutils: 42b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wileyusing android::Looper; 43b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wileyusing android::LooperCallback; 44b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wileyusing android::OK; 45b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wileyusing android::sp; 46b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wileyusing android::status_t; 47b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wileyusing android::String16; 48b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley 49b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley// libbinder: 50b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wileyusing android::BnInterface; 51b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wileyusing android::defaultServiceManager; 52b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wileyusing android::IInterface; 53b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wileyusing android::IPCThreadState; 54b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wileyusing android::Parcel; 55b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wileyusing android::ProcessState; 56b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley 57b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley// Generated code: 58521bb618fa16d0b88ae88b8dcd98b72e579f1ed4Christopher Wileyusing android::aidl::tests::BnTestService; 59389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinusing android::aidl::tests::BnNamedCallback; 60389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinusing android::aidl::tests::INamedCallback; 61b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley 62389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin// Standard library 63389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinusing std::map; 648949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wileyusing std::vector; 658949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley 66b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wileynamespace android { 67b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wileynamespace generated { 68b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wileynamespace { 69b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley 70b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wileyclass BinderCallback : public LooperCallback { 71b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley public: 72b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley BinderCallback() {} 73b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley ~BinderCallback() override {} 74b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley 75ad3b806770d3eb833e39ec029925ca2dd6b3c7c7Brian Carlstrom int handleEvent(int /* fd */, int /* events */, void* /* data */ ) override { 76b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley IPCThreadState::self()->handlePolledCommands(); 77b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley return 1; // Continue receiving callbacks. 78b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley } 79b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley}; 80b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley 81389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinclass NamedCallback : public BnNamedCallback { 82389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin public: 83389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin NamedCallback(String16 name) : name_(name) {} 84389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin 85389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin status_t GetName(String16* ret) { 86389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin *ret = name_; 87389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin return OK; 88389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin } 89389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin 90389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin private: 91389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin String16 name_; 92389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}; 93389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin 94521bb618fa16d0b88ae88b8dcd98b72e579f1ed4Christopher Wileyclass NativeService : public BnTestService { 95b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley public: 9633ad81e306649cb769e02d10ccf77520b68c7742Christopher Wiley NativeService() {} 9733ad81e306649cb769e02d10ccf77520b68c7742Christopher Wiley ~NativeService() override {} 98b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley 99b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley int Run() { 100b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley sp<Looper> looper(Looper::prepare(0 /* opts */)); 101b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley 102b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley int binder_fd = -1; 103b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley ProcessState::self()->setThreadPoolMaxThreadCount(0); 104b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley IPCThreadState::self()->disableBackgroundScheduling(true); 105b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley IPCThreadState::self()->setupPolling(&binder_fd); 106b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley ALOGI("Got binder FD %d", binder_fd); 107b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley if (binder_fd < 0) return -1; 108b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley 109b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley sp<BinderCallback> cb(new BinderCallback); 110b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley if (looper->addFd(binder_fd, Looper::POLL_CALLBACK, Looper::EVENT_INPUT, cb, 111b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley nullptr) != 1) { 112b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley ALOGE("Failed to add binder FD to Looper"); 113b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley return -1; 114b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley } 115b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley 116b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley defaultServiceManager()->addService(getInterfaceDescriptor(), this); 117b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley 118b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley ALOGI("Entering loop"); 119b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley while (true) { 120b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley const int result = looper->pollAll(-1 /* timeoutMillis */); 121b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley ALOGI("Looper returned %d", result); 122b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley } 123b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley return 0; 124b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley } 125b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley 126d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley void LogRepeatedStringToken(const String16& token) { 127048b55eeb21d2171c203143da7e329dc85b8c0a0Chih-Hung Hsieh ALOGI("Repeating '%s' of length=%zu", android::String8(token).string(), 128d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley token.size()); 129d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley } 130d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley 131d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley template<typename T> 132d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley void LogRepeatedToken(const T& token) { 133d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley std::ostringstream token_str; 134d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley token_str << token; 135d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley ALOGI("Repeating token %s", token_str.str().c_str()); 136d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley } 137d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley 138d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley status_t RepeatBoolean(bool token, bool* _aidl_return) override { 139d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley LogRepeatedToken(token ? 1 : 0); 140d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley *_aidl_return = token; 141d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley return OK; 142d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley } 143d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley status_t RepeatByte(int8_t token, int8_t* _aidl_return) override { 144d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley LogRepeatedToken(token); 145d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley *_aidl_return = token; 146d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley return OK; 147d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley } 148d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley status_t RepeatChar(char16_t token, char16_t* _aidl_return) override { 149d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley LogRepeatedStringToken(String16(&token, 1)); 150d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley *_aidl_return = token; 151d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley return OK; 152d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley } 153d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley status_t RepeatInt(int32_t token, int32_t* _aidl_return) override { 154d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley LogRepeatedToken(token); 155d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley *_aidl_return = token; 156d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley return OK; 157d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley } 158d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley status_t RepeatLong(int64_t token, int64_t* _aidl_return) override { 159d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley LogRepeatedToken(token); 160d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley *_aidl_return = token; 161d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley return OK; 162d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley } 163d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley status_t RepeatFloat(float token, float* _aidl_return) override { 164d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley LogRepeatedToken(token); 165d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley *_aidl_return = token; 166d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley return OK; 167d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley } 168d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley status_t RepeatDouble(double token, double* _aidl_return) override { 169d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley LogRepeatedToken(token); 170d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley *_aidl_return = token; 171d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley return OK; 172d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley } 173b8e49a407e8648afb28ca9bad4bf8434224f0b18Christopher Wiley status_t RepeatString( 174b8e49a407e8648afb28ca9bad4bf8434224f0b18Christopher Wiley const String16& token, String16* _aidl_return) override { 175d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley LogRepeatedStringToken(token); 176d6130f24cfdc3ae1247c4ac290e3f282b34e7615Christopher Wiley *_aidl_return = token; 177b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley return OK; 178b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley } 1798949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley 1808949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley template<typename T> 1818949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley status_t ReverseArray(const vector<T>& input, 1828949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley vector<T>* repeated, 18347964b084c06ad3ab79040ce6586a15a3edca380Christopher Wiley vector<T>* _aidl_return) { 1848949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley ALOGI("Reversing array of length %zu", input.size()); 1858949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley *repeated = input; 1868949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley *_aidl_return = input; 1878949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley std::reverse(_aidl_return->begin(), _aidl_return->end()); 1888949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley return OK; 1898949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley } 1908949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley 1918949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley status_t ReverseBoolean(const vector<bool>& input, 1928949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley vector<bool>* repeated, 1938949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley vector<bool>* _aidl_return) override { 1948949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley return ReverseArray(input, repeated, _aidl_return); 1958949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley } 1968949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley status_t ReverseByte(const vector<int8_t>& input, 1978949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley vector<int8_t>* repeated, 1988949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley vector<int8_t>* _aidl_return) override { 1998949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley return ReverseArray(input, repeated, _aidl_return); 2008949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley } 2018949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley status_t ReverseChar(const vector<char16_t>& input, 2028949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley vector<char16_t>* repeated, 2038949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley vector<char16_t>* _aidl_return) override { 2048949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley return ReverseArray(input, repeated, _aidl_return); 2058949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley } 2068949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley status_t ReverseInt(const vector<int32_t>& input, 2078949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley vector<int32_t>* repeated, 2088949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley vector<int32_t>* _aidl_return) override { 2098949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley return ReverseArray(input, repeated, _aidl_return); 2108949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley } 2118949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley status_t ReverseLong(const vector<int64_t>& input, 2128949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley vector<int64_t>* repeated, 2138949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley vector<int64_t>* _aidl_return) override { 2148949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley return ReverseArray(input, repeated, _aidl_return); 2158949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley } 2168949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley status_t ReverseFloat(const vector<float>& input, 2178949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley vector<float>* repeated, 2188949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley vector<float>* _aidl_return) override { 2198949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley return ReverseArray(input, repeated, _aidl_return); 2208949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley } 2218949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley status_t ReverseDouble(const vector<double>& input, 2228949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley vector<double>* repeated, 2238949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley vector<double>* _aidl_return) override { 2248949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley return ReverseArray(input, repeated, _aidl_return); 2258949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley } 2268949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley status_t ReverseString(const vector<String16>& input, 2278949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley vector<String16>* repeated, 2288949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley vector<String16>* _aidl_return) override { 2298949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley return ReverseArray(input, repeated, _aidl_return); 2308949f838b881fe52e8fc6be527ab25806f4cc4e6Christopher Wiley } 231389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin 232389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin status_t GetOtherTestService(const String16& name, 233389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin sp<INamedCallback>* returned_service) override { 234389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin if (service_map_.find(name) == service_map_.end()) { 235389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin sp<INamedCallback> new_item(new NamedCallback(name)); 236389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin service_map_[name] = new_item; 237389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin } 238389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin 239389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin *returned_service = service_map_[name]; 240389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin return OK; 241389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin } 242389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin 243389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin status_t VerifyName(const sp<INamedCallback>& service, const String16& name, 244389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin bool* returned_value) override { 245389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin String16 foundName; 246389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin status_t err = service->GetName(&foundName); 247389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin 248389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin if (err == OK) { 249389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin *returned_value = foundName == name; 250389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin } 251389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin 252389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin return err; 253389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin } 254389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin 255389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin private: 256389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin map<String16, sp<INamedCallback>> service_map_; 257b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley}; 258b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley 259b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley} // namespace 260b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley} // namespace generated 261b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley} // namespace android 262b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley 263ad3b806770d3eb833e39ec029925ca2dd6b3c7c7Brian Carlstromint main(int /* argc */, char* /* argv */ []) { 26433ad81e306649cb769e02d10ccf77520b68c7742Christopher Wiley android::generated::NativeService service; 265b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley return service.Run(); 266b5e698c8bf4efc7bcbe5fd24685968db10e62735Christopher Wiley} 267