1 /* 2 * Copyright (C) 2018 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #include <aidl/test_package/BnCompatTest.h> 18 #include <aidl/test_package/BnTest.h> 19 #include <aidl/test_package/MyExt.h> 20 #include <aidl/test_package/SimpleUnion.h> 21 #include <stdio.h> 22 #include <unistd.h> 23 24 #include <condition_variable> 25 #include <mutex> 26 27 #include "legacy_binder.h" 28 #include "utilities.h" 29 30 using ::aidl::test_package::Bar; 31 using ::aidl::test_package::Baz; 32 using ::aidl::test_package::ByteEnum; 33 using ::aidl::test_package::ExtendableParcelable; 34 using ::aidl::test_package::Foo; 35 using ::aidl::test_package::IEmpty; 36 using ::aidl::test_package::IntEnum; 37 using ::aidl::test_package::LongEnum; 38 using ::aidl::test_package::MyExt; 39 using ::aidl::test_package::RegularPolygon; 40 using ::aidl::test_package::SimpleUnion; 41 42 class MyTest : public ::aidl::test_package::BnTest, 43 public ThisShouldBeDestroyed { 44 public: dump(int fd,const char ** args,uint32_t numArgs)45 binder_status_t dump(int fd, const char** args, uint32_t numArgs) override { 46 for (uint32_t i = 0; i < numArgs; i++) { 47 dprintf(fd, "%s", args[i]); 48 } 49 fsync(fd); 50 return STATUS_OK; 51 } 52 GetName(std::string * _aidl_return)53 ::ndk::ScopedAStatus GetName(std::string* _aidl_return) override { 54 *_aidl_return = "CPP"; 55 return ::ndk::ScopedAStatus(AStatus_newOk()); 56 } TestVoidReturn()57 ::ndk::ScopedAStatus TestVoidReturn() override { 58 return ::ndk::ScopedAStatus(AStatus_newOk()); 59 } TestOneway()60 ::ndk::ScopedAStatus TestOneway() override { 61 // This return code should be ignored since it is oneway. 62 return ::ndk::ScopedAStatus(AStatus_fromStatus(STATUS_UNKNOWN_ERROR)); 63 } 64 GiveMeMyCallingPid(int32_t * _aidl_return)65 ::ndk::ScopedAStatus GiveMeMyCallingPid(int32_t* _aidl_return) override { 66 *_aidl_return = AIBinder_getCallingPid(); 67 return ::ndk::ScopedAStatus(AStatus_newOk()); 68 } GiveMeMyCallingUid(int32_t * _aidl_return)69 ::ndk::ScopedAStatus GiveMeMyCallingUid(int32_t* _aidl_return) override { 70 *_aidl_return = AIBinder_getCallingUid(); 71 return ::ndk::ScopedAStatus(AStatus_newOk()); 72 } 73 74 private: 75 bool mCached = false; 76 std::mutex mCachedMutex; 77 std::condition_variable mCachedCondition; 78 int mCachedPid = -1; 79 int mCachedUid = -1; 80 81 public: CacheCallingInfoFromOneway()82 ::ndk::ScopedAStatus CacheCallingInfoFromOneway() override { 83 std::unique_lock<std::mutex> l(mCachedMutex); 84 mCached = true; 85 mCachedPid = AIBinder_getCallingPid(); 86 mCachedUid = AIBinder_getCallingUid(); 87 mCachedCondition.notify_all(); 88 89 return ::ndk::ScopedAStatus(AStatus_newOk()); 90 } GiveMeMyCallingPidFromOneway(int32_t * _aidl_return)91 ::ndk::ScopedAStatus GiveMeMyCallingPidFromOneway( 92 int32_t* _aidl_return) override { 93 std::unique_lock<std::mutex> l(mCachedMutex); 94 mCachedCondition.wait(l, [&] { return mCached; }); 95 96 *_aidl_return = mCachedPid; 97 return ::ndk::ScopedAStatus(AStatus_newOk()); 98 } GiveMeMyCallingUidFromOneway(int32_t * _aidl_return)99 ::ndk::ScopedAStatus GiveMeMyCallingUidFromOneway( 100 int32_t* _aidl_return) override { 101 std::unique_lock<std::mutex> l(mCachedMutex); 102 mCachedCondition.wait(l, [&] { return mCached; }); 103 104 *_aidl_return = mCachedUid; 105 return ::ndk::ScopedAStatus(AStatus_newOk()); 106 } RepeatInt(int32_t in_value,int32_t * _aidl_return)107 ::ndk::ScopedAStatus RepeatInt(int32_t in_value, 108 int32_t* _aidl_return) override { 109 *_aidl_return = in_value; 110 return ::ndk::ScopedAStatus(AStatus_newOk()); 111 } RepeatLong(int64_t in_value,int64_t * _aidl_return)112 ::ndk::ScopedAStatus RepeatLong(int64_t in_value, 113 int64_t* _aidl_return) override { 114 *_aidl_return = in_value; 115 return ::ndk::ScopedAStatus(AStatus_newOk()); 116 } RepeatFloat(float in_value,float * _aidl_return)117 ::ndk::ScopedAStatus RepeatFloat(float in_value, 118 float* _aidl_return) override { 119 *_aidl_return = in_value; 120 return ::ndk::ScopedAStatus(AStatus_newOk()); 121 } RepeatDouble(double in_value,double * _aidl_return)122 ::ndk::ScopedAStatus RepeatDouble(double in_value, 123 double* _aidl_return) override { 124 *_aidl_return = in_value; 125 return ::ndk::ScopedAStatus(AStatus_newOk()); 126 } RepeatBoolean(bool in_value,bool * _aidl_return)127 ::ndk::ScopedAStatus RepeatBoolean(bool in_value, 128 bool* _aidl_return) override { 129 *_aidl_return = in_value; 130 return ::ndk::ScopedAStatus(AStatus_newOk()); 131 } RepeatChar(char16_t in_value,char16_t * _aidl_return)132 ::ndk::ScopedAStatus RepeatChar(char16_t in_value, 133 char16_t* _aidl_return) override { 134 *_aidl_return = in_value; 135 return ::ndk::ScopedAStatus(AStatus_newOk()); 136 } RepeatByte(int8_t in_value,int8_t * _aidl_return)137 ::ndk::ScopedAStatus RepeatByte(int8_t in_value, 138 int8_t* _aidl_return) override { 139 *_aidl_return = in_value; 140 return ::ndk::ScopedAStatus(AStatus_newOk()); 141 } RepeatByteEnum(ByteEnum in_value,ByteEnum * _aidl_return)142 ::ndk::ScopedAStatus RepeatByteEnum(ByteEnum in_value, ByteEnum* _aidl_return) override { 143 *_aidl_return = in_value; 144 return ::ndk::ScopedAStatus(AStatus_newOk()); 145 } RepeatIntEnum(IntEnum in_value,IntEnum * _aidl_return)146 ::ndk::ScopedAStatus RepeatIntEnum(IntEnum in_value, IntEnum* _aidl_return) override { 147 *_aidl_return = in_value; 148 return ::ndk::ScopedAStatus(AStatus_newOk()); 149 } RepeatLongEnum(LongEnum in_value,LongEnum * _aidl_return)150 ::ndk::ScopedAStatus RepeatLongEnum(LongEnum in_value, LongEnum* _aidl_return) override { 151 *_aidl_return = in_value; 152 return ::ndk::ScopedAStatus(AStatus_newOk()); 153 } RepeatBinder(const::ndk::SpAIBinder & in_value,::ndk::SpAIBinder * _aidl_return)154 ::ndk::ScopedAStatus RepeatBinder(const ::ndk::SpAIBinder& in_value, 155 ::ndk::SpAIBinder* _aidl_return) override { 156 *_aidl_return = in_value; 157 return ::ndk::ScopedAStatus(AStatus_newOk()); 158 } RepeatNullableBinder(const::ndk::SpAIBinder & in_value,::ndk::SpAIBinder * _aidl_return)159 ::ndk::ScopedAStatus RepeatNullableBinder( 160 const ::ndk::SpAIBinder& in_value, 161 ::ndk::SpAIBinder* _aidl_return) override { 162 *_aidl_return = in_value; 163 return ::ndk::ScopedAStatus(AStatus_newOk()); 164 } RepeatInterface(const std::shared_ptr<IEmpty> & in_value,std::shared_ptr<IEmpty> * _aidl_return)165 ::ndk::ScopedAStatus RepeatInterface( 166 const std::shared_ptr<IEmpty>& in_value, 167 std::shared_ptr<IEmpty>* _aidl_return) override { 168 *_aidl_return = in_value; 169 return ::ndk::ScopedAStatus(AStatus_newOk()); 170 } RepeatNullableInterface(const std::shared_ptr<IEmpty> & in_value,std::shared_ptr<IEmpty> * _aidl_return)171 ::ndk::ScopedAStatus RepeatNullableInterface( 172 const std::shared_ptr<IEmpty>& in_value, 173 std::shared_ptr<IEmpty>* _aidl_return) override { 174 *_aidl_return = in_value; 175 return ::ndk::ScopedAStatus(AStatus_newOk()); 176 } RepeatFd(const::ndk::ScopedFileDescriptor & in_value,::ndk::ScopedFileDescriptor * _aidl_return)177 ::ndk::ScopedAStatus RepeatFd( 178 const ::ndk::ScopedFileDescriptor& in_value, 179 ::ndk::ScopedFileDescriptor* _aidl_return) override { 180 *_aidl_return = in_value.dup(); 181 return ::ndk::ScopedAStatus(AStatus_newOk()); 182 } 183 RepeatFdArray(const std::vector<::ndk::ScopedFileDescriptor> & in_input,std::vector<::ndk::ScopedFileDescriptor> * out_repeated,std::vector<::ndk::ScopedFileDescriptor> * _aidl_return)184 ::ndk::ScopedAStatus RepeatFdArray( 185 const std::vector<::ndk::ScopedFileDescriptor>& in_input, 186 std::vector<::ndk::ScopedFileDescriptor>* out_repeated, 187 std::vector<::ndk::ScopedFileDescriptor>* _aidl_return) override { 188 out_repeated->clear(); 189 for (auto& fd : in_input) { 190 out_repeated->emplace_back(dup(fd.get())); 191 _aidl_return->emplace_back(dup(fd.get())); 192 } 193 return ::ndk::ScopedAStatus(AStatus_newOk()); 194 } 195 RepeatNullableFd(const::ndk::ScopedFileDescriptor & in_value,::ndk::ScopedFileDescriptor * _aidl_return)196 ::ndk::ScopedAStatus RepeatNullableFd( 197 const ::ndk::ScopedFileDescriptor& in_value, 198 ::ndk::ScopedFileDescriptor* _aidl_return) override { 199 _aidl_return->set(dup(in_value.get())); 200 return ::ndk::ScopedAStatus(AStatus_newOk()); 201 } RepeatString(const std::string & in_value,std::string * _aidl_return)202 ::ndk::ScopedAStatus RepeatString(const std::string& in_value, 203 std::string* _aidl_return) override { 204 *_aidl_return = in_value; 205 return ::ndk::ScopedAStatus(AStatus_newOk()); 206 } RepeatNullableString(const std::optional<std::string> & in_value,std::optional<std::string> * _aidl_return)207 ::ndk::ScopedAStatus RepeatNullableString( 208 const std::optional<std::string>& in_value, 209 std::optional<std::string>* _aidl_return) override { 210 *_aidl_return = in_value; 211 return ::ndk::ScopedAStatus(AStatus_newOk()); 212 } RepeatPolygon(const RegularPolygon & in_value,RegularPolygon * _aidl_return)213 ::ndk::ScopedAStatus RepeatPolygon(const RegularPolygon& in_value, 214 RegularPolygon* _aidl_return) override { 215 *_aidl_return = in_value; 216 return ::ndk::ScopedAStatus(AStatus_newOk()); 217 } RepeatNullablePolygon(const std::optional<RegularPolygon> & in_value,std::optional<RegularPolygon> * _aidl_return)218 ::ndk::ScopedAStatus RepeatNullablePolygon(const std::optional<RegularPolygon>& in_value, 219 std::optional<RegularPolygon>* _aidl_return) override { 220 *_aidl_return = in_value; 221 return ::ndk::ScopedAStatus(AStatus_newOk()); 222 } RepeatPersistableBundle(const::aidl::android::os::PersistableBundle & in_input,::aidl::android::os::PersistableBundle * _aidl_return)223 ::ndk::ScopedAStatus RepeatPersistableBundle( 224 const ::aidl::android::os::PersistableBundle& in_input, 225 ::aidl::android::os::PersistableBundle* _aidl_return) { 226 *_aidl_return = in_input; 227 return ::ndk::ScopedAStatus(AStatus_newOk()); 228 } RenamePolygon(RegularPolygon * value,const std::string & newName)229 ::ndk::ScopedAStatus RenamePolygon(RegularPolygon* value, 230 const std::string& newName) override { 231 value->name = newName; 232 return ::ndk::ScopedAStatus(AStatus_newOk()); 233 } RepeatBooleanArray(const std::vector<bool> & in_value,std::vector<bool> * out_repeated,std::vector<bool> * _aidl_return)234 ::ndk::ScopedAStatus RepeatBooleanArray( 235 const std::vector<bool>& in_value, std::vector<bool>* out_repeated, 236 std::vector<bool>* _aidl_return) override { 237 *out_repeated = in_value; 238 *_aidl_return = in_value; 239 return ::ndk::ScopedAStatus(AStatus_newOk()); 240 } RepeatByteArray(const std::vector<uint8_t> & in_value,std::vector<uint8_t> * out_repeated,std::vector<uint8_t> * _aidl_return)241 ::ndk::ScopedAStatus RepeatByteArray(const std::vector<uint8_t>& in_value, 242 std::vector<uint8_t>* out_repeated, 243 std::vector<uint8_t>* _aidl_return) override { 244 *out_repeated = in_value; 245 *_aidl_return = in_value; 246 return ::ndk::ScopedAStatus(AStatus_newOk()); 247 } RepeatCharArray(const std::vector<char16_t> & in_value,std::vector<char16_t> * out_repeated,std::vector<char16_t> * _aidl_return)248 ::ndk::ScopedAStatus RepeatCharArray( 249 const std::vector<char16_t>& in_value, 250 std::vector<char16_t>* out_repeated, 251 std::vector<char16_t>* _aidl_return) override { 252 *out_repeated = in_value; 253 *_aidl_return = in_value; 254 return ::ndk::ScopedAStatus(AStatus_newOk()); 255 } RepeatIntArray(const std::vector<int32_t> & in_value,std::vector<int32_t> * out_repeated,std::vector<int32_t> * _aidl_return)256 ::ndk::ScopedAStatus RepeatIntArray( 257 const std::vector<int32_t>& in_value, std::vector<int32_t>* out_repeated, 258 std::vector<int32_t>* _aidl_return) override { 259 *out_repeated = in_value; 260 *_aidl_return = in_value; 261 return ::ndk::ScopedAStatus(AStatus_newOk()); 262 } RepeatLongArray(const std::vector<int64_t> & in_value,std::vector<int64_t> * out_repeated,std::vector<int64_t> * _aidl_return)263 ::ndk::ScopedAStatus RepeatLongArray( 264 const std::vector<int64_t>& in_value, std::vector<int64_t>* out_repeated, 265 std::vector<int64_t>* _aidl_return) override { 266 *out_repeated = in_value; 267 *_aidl_return = in_value; 268 return ::ndk::ScopedAStatus(AStatus_newOk()); 269 } RepeatFloatArray(const std::vector<float> & in_value,std::vector<float> * out_repeated,std::vector<float> * _aidl_return)270 ::ndk::ScopedAStatus RepeatFloatArray( 271 const std::vector<float>& in_value, std::vector<float>* out_repeated, 272 std::vector<float>* _aidl_return) override { 273 *out_repeated = in_value; 274 *_aidl_return = in_value; 275 return ::ndk::ScopedAStatus(AStatus_newOk()); 276 } RepeatDoubleArray(const std::vector<double> & in_value,std::vector<double> * out_repeated,std::vector<double> * _aidl_return)277 ::ndk::ScopedAStatus RepeatDoubleArray( 278 const std::vector<double>& in_value, std::vector<double>* out_repeated, 279 std::vector<double>* _aidl_return) override { 280 *out_repeated = in_value; 281 *_aidl_return = in_value; 282 return ::ndk::ScopedAStatus(AStatus_newOk()); 283 } RepeatByteEnumArray(const std::vector<ByteEnum> & in_value,std::vector<ByteEnum> * out_repeated,std::vector<ByteEnum> * _aidl_return)284 ::ndk::ScopedAStatus RepeatByteEnumArray(const std::vector<ByteEnum>& in_value, 285 std::vector<ByteEnum>* out_repeated, 286 std::vector<ByteEnum>* _aidl_return) override { 287 *out_repeated = in_value; 288 *_aidl_return = in_value; 289 return ::ndk::ScopedAStatus(AStatus_newOk()); 290 } RepeatIntEnumArray(const std::vector<IntEnum> & in_value,std::vector<IntEnum> * out_repeated,std::vector<IntEnum> * _aidl_return)291 ::ndk::ScopedAStatus RepeatIntEnumArray(const std::vector<IntEnum>& in_value, 292 std::vector<IntEnum>* out_repeated, 293 std::vector<IntEnum>* _aidl_return) override { 294 *out_repeated = in_value; 295 *_aidl_return = in_value; 296 return ::ndk::ScopedAStatus(AStatus_newOk()); 297 } RepeatLongEnumArray(const std::vector<LongEnum> & in_value,std::vector<LongEnum> * out_repeated,std::vector<LongEnum> * _aidl_return)298 ::ndk::ScopedAStatus RepeatLongEnumArray(const std::vector<LongEnum>& in_value, 299 std::vector<LongEnum>* out_repeated, 300 std::vector<LongEnum>* _aidl_return) override { 301 *out_repeated = in_value; 302 *_aidl_return = in_value; 303 return ::ndk::ScopedAStatus(AStatus_newOk()); 304 } RepeatStringArray(const std::vector<std::string> & in_value,std::vector<std::string> * out_repeated,std::vector<std::string> * _aidl_return)305 ::ndk::ScopedAStatus RepeatStringArray( 306 const std::vector<std::string>& in_value, 307 std::vector<std::string>* out_repeated, 308 std::vector<std::string>* _aidl_return) override { 309 *out_repeated = in_value; 310 *_aidl_return = in_value; 311 return ::ndk::ScopedAStatus(AStatus_newOk()); 312 } RepeatRegularPolygonArray(const std::vector<RegularPolygon> & in_value,std::vector<RegularPolygon> * out_repeated,std::vector<RegularPolygon> * _aidl_return)313 ::ndk::ScopedAStatus RepeatRegularPolygonArray( 314 const std::vector<RegularPolygon>& in_value, std::vector<RegularPolygon>* out_repeated, 315 std::vector<RegularPolygon>* _aidl_return) override { 316 *out_repeated = in_value; 317 *_aidl_return = in_value; 318 return ::ndk::ScopedAStatus(AStatus_newOk()); 319 } 320 RepeatBinderArray(const std::vector<::ndk::SpAIBinder> & in_value,std::vector<::ndk::SpAIBinder> * out_repeated,std::vector<::ndk::SpAIBinder> * _aidl_return)321 ::ndk::ScopedAStatus RepeatBinderArray(const std::vector<::ndk::SpAIBinder>& in_value, 322 std::vector<::ndk::SpAIBinder>* out_repeated, 323 std::vector<::ndk::SpAIBinder>* _aidl_return) override { 324 *out_repeated = in_value; 325 *_aidl_return = in_value; 326 return ::ndk::ScopedAStatus(AStatus_newOk()); 327 } 328 RepeatInterfaceArray(const std::vector<std::shared_ptr<IEmpty>> & in_value,std::vector<std::shared_ptr<IEmpty>> * out_repeated,std::vector<std::shared_ptr<IEmpty>> * _aidl_return)329 ::ndk::ScopedAStatus RepeatInterfaceArray( 330 const std::vector<std::shared_ptr<IEmpty>>& in_value, 331 std::vector<std::shared_ptr<IEmpty>>* out_repeated, 332 std::vector<std::shared_ptr<IEmpty>>* _aidl_return) override { 333 *out_repeated = in_value; 334 *_aidl_return = in_value; 335 return ::ndk::ScopedAStatus(AStatus_newOk()); 336 } 337 Repeat2StringList(const std::vector<std::string> & in_input,std::vector<std::string> * out_repeated,std::vector<std::string> * _aidl_return)338 ::ndk::ScopedAStatus Repeat2StringList(const std::vector<std::string>& in_input, 339 std::vector<std::string>* out_repeated, 340 std::vector<std::string>* _aidl_return) override { 341 *out_repeated = std::vector<std::string>(); 342 *_aidl_return = std::vector<std::string>(); 343 for (int i = 0; i < 2; i++) { 344 for (auto& s : in_input) { 345 out_repeated->emplace_back(s); 346 _aidl_return->emplace_back(s); 347 } 348 } 349 350 return ::ndk::ScopedAStatus(AStatus_newOk()); 351 } 352 Repeat2RegularPolygonList(const std::vector<::aidl::test_package::RegularPolygon> & in_input,std::vector<::aidl::test_package::RegularPolygon> * out_repeated,std::vector<::aidl::test_package::RegularPolygon> * _aidl_return)353 ::ndk::ScopedAStatus Repeat2RegularPolygonList( 354 const std::vector<::aidl::test_package::RegularPolygon>& in_input, 355 std::vector<::aidl::test_package::RegularPolygon>* out_repeated, 356 std::vector<::aidl::test_package::RegularPolygon>* _aidl_return) override { 357 *out_repeated = std::vector<::aidl::test_package::RegularPolygon>(); 358 *_aidl_return = std::vector<::aidl::test_package::RegularPolygon>(); 359 for (int i = 0; i < 2; i++) { 360 for (auto& s : in_input) { 361 out_repeated->emplace_back(s); 362 _aidl_return->emplace_back(s); 363 } 364 } 365 return ::ndk::ScopedAStatus(AStatus_newOk()); 366 } 367 RepeatNullableBooleanArray(const std::optional<std::vector<bool>> & in_value,std::optional<std::vector<bool>> * _aidl_return)368 ::ndk::ScopedAStatus RepeatNullableBooleanArray( 369 const std::optional<std::vector<bool>>& in_value, 370 std::optional<std::vector<bool>>* _aidl_return) override { 371 *_aidl_return = in_value; 372 return ::ndk::ScopedAStatus(AStatus_newOk()); 373 } RepeatNullableByteArray(const std::optional<std::vector<uint8_t>> & in_value,std::optional<std::vector<uint8_t>> * _aidl_return)374 ::ndk::ScopedAStatus RepeatNullableByteArray( 375 const std::optional<std::vector<uint8_t>>& in_value, 376 std::optional<std::vector<uint8_t>>* _aidl_return) override { 377 *_aidl_return = in_value; 378 return ::ndk::ScopedAStatus(AStatus_newOk()); 379 } RepeatNullableCharArray(const std::optional<std::vector<char16_t>> & in_value,std::optional<std::vector<char16_t>> * _aidl_return)380 ::ndk::ScopedAStatus RepeatNullableCharArray( 381 const std::optional<std::vector<char16_t>>& in_value, 382 std::optional<std::vector<char16_t>>* _aidl_return) override { 383 *_aidl_return = in_value; 384 return ::ndk::ScopedAStatus(AStatus_newOk()); 385 } RepeatNullableIntArray(const std::optional<std::vector<int32_t>> & in_value,std::optional<std::vector<int32_t>> * _aidl_return)386 ::ndk::ScopedAStatus RepeatNullableIntArray( 387 const std::optional<std::vector<int32_t>>& in_value, 388 std::optional<std::vector<int32_t>>* _aidl_return) override { 389 *_aidl_return = in_value; 390 return ::ndk::ScopedAStatus(AStatus_newOk()); 391 } RepeatNullableLongArray(const std::optional<std::vector<int64_t>> & in_value,std::optional<std::vector<int64_t>> * _aidl_return)392 ::ndk::ScopedAStatus RepeatNullableLongArray( 393 const std::optional<std::vector<int64_t>>& in_value, 394 std::optional<std::vector<int64_t>>* _aidl_return) override { 395 *_aidl_return = in_value; 396 return ::ndk::ScopedAStatus(AStatus_newOk()); 397 } RepeatNullableFloatArray(const std::optional<std::vector<float>> & in_value,std::optional<std::vector<float>> * _aidl_return)398 ::ndk::ScopedAStatus RepeatNullableFloatArray( 399 const std::optional<std::vector<float>>& in_value, 400 std::optional<std::vector<float>>* _aidl_return) override { 401 *_aidl_return = in_value; 402 return ::ndk::ScopedAStatus(AStatus_newOk()); 403 } RepeatNullableDoubleArray(const std::optional<std::vector<double>> & in_value,std::optional<std::vector<double>> * _aidl_return)404 ::ndk::ScopedAStatus RepeatNullableDoubleArray( 405 const std::optional<std::vector<double>>& in_value, 406 std::optional<std::vector<double>>* _aidl_return) override { 407 *_aidl_return = in_value; 408 return ::ndk::ScopedAStatus(AStatus_newOk()); 409 } RepeatNullableByteEnumArray(const std::optional<std::vector<ByteEnum>> & in_value,std::optional<std::vector<ByteEnum>> * _aidl_return)410 ::ndk::ScopedAStatus RepeatNullableByteEnumArray( 411 const std::optional<std::vector<ByteEnum>>& in_value, 412 std::optional<std::vector<ByteEnum>>* _aidl_return) override { 413 *_aidl_return = in_value; 414 return ::ndk::ScopedAStatus(AStatus_newOk()); 415 } RepeatNullableIntEnumArray(const std::optional<std::vector<IntEnum>> & in_value,std::optional<std::vector<IntEnum>> * _aidl_return)416 ::ndk::ScopedAStatus RepeatNullableIntEnumArray( 417 const std::optional<std::vector<IntEnum>>& in_value, 418 std::optional<std::vector<IntEnum>>* _aidl_return) override { 419 *_aidl_return = in_value; 420 return ::ndk::ScopedAStatus(AStatus_newOk()); 421 } RepeatNullableLongEnumArray(const std::optional<std::vector<LongEnum>> & in_value,std::optional<std::vector<LongEnum>> * _aidl_return)422 ::ndk::ScopedAStatus RepeatNullableLongEnumArray( 423 const std::optional<std::vector<LongEnum>>& in_value, 424 std::optional<std::vector<LongEnum>>* _aidl_return) override { 425 *_aidl_return = in_value; 426 return ::ndk::ScopedAStatus(AStatus_newOk()); 427 } RepeatNullableStringArray(const std::optional<std::vector<std::optional<std::string>>> & in_value,std::optional<std::vector<std::optional<std::string>>> * _aidl_return)428 ::ndk::ScopedAStatus RepeatNullableStringArray( 429 const std::optional<std::vector<std::optional<std::string>>>& in_value, 430 std::optional<std::vector<std::optional<std::string>>>* _aidl_return) { 431 *_aidl_return = in_value; 432 return ::ndk::ScopedAStatus(AStatus_newOk()); 433 } RepeatNullableBinderArray(const std::optional<std::vector<::ndk::SpAIBinder>> & in_value,std::optional<std::vector<::ndk::SpAIBinder>> * _aidl_return)434 ::ndk::ScopedAStatus RepeatNullableBinderArray( 435 const std::optional<std::vector<::ndk::SpAIBinder>>& in_value, 436 std::optional<std::vector<::ndk::SpAIBinder>>* _aidl_return) override { 437 *_aidl_return = in_value; 438 return ::ndk::ScopedAStatus(AStatus_newOk()); 439 } RepeatNullableInterfaceArray(const std::optional<std::vector<std::shared_ptr<IEmpty>>> & in_value,std::optional<std::vector<std::shared_ptr<IEmpty>>> * _aidl_return)440 ::ndk::ScopedAStatus RepeatNullableInterfaceArray( 441 const std::optional<std::vector<std::shared_ptr<IEmpty>>>& in_value, 442 std::optional<std::vector<std::shared_ptr<IEmpty>>>* _aidl_return) override { 443 *_aidl_return = in_value; 444 return ::ndk::ScopedAStatus(AStatus_newOk()); 445 } DoubleRepeatNullableStringArray(const std::optional<std::vector<std::optional<std::string>>> & in_value,std::optional<std::vector<std::optional<std::string>>> * out_repeated,std::optional<std::vector<std::optional<std::string>>> * _aidl_return)446 ::ndk::ScopedAStatus DoubleRepeatNullableStringArray( 447 const std::optional<std::vector<std::optional<std::string>>>& in_value, 448 std::optional<std::vector<std::optional<std::string>>>* out_repeated, 449 std::optional<std::vector<std::optional<std::string>>>* _aidl_return) 450 override { 451 *out_repeated = in_value; 452 *_aidl_return = in_value; 453 return ::ndk::ScopedAStatus(AStatus_newOk()); 454 } 455 getICompatTest(::ndk::SpAIBinder * _aidl_return)456 ::ndk::ScopedAStatus getICompatTest(::ndk::SpAIBinder* _aidl_return) { 457 class MyCompatTest : public ::aidl::test_package::BnCompatTest { 458 public: 459 ::ndk::ScopedAStatus repeatBaz(const ::aidl::test_package::Baz& in_inBaz, 460 ::aidl::test_package::Baz* _aidl_return) override { 461 *_aidl_return = in_inBaz; 462 return ::ndk::ScopedAStatus(AStatus_newOk()); 463 } 464 465 #ifdef USING_VERSION_1 466 ::ndk::ScopedAStatus RepeatStringNullableLater(const std::string& in_value, 467 std::string* _aidl_return) override { 468 *_aidl_return = in_value; 469 return ::ndk::ScopedAStatus(AStatus_newOk()); 470 } 471 #else 472 ::ndk::ScopedAStatus RepeatStringNullableLater( 473 const std::optional<std::string>& in_value, 474 std::optional<std::string>* _aidl_return) override { 475 *_aidl_return = in_value; 476 return ::ndk::ScopedAStatus(AStatus_newOk()); 477 } 478 #endif 479 480 #ifndef USING_VERSION_1 481 ::ndk::ScopedAStatus NewMethodThatReturns10(int32_t* _aidl_return) override { 482 *_aidl_return = 10; 483 return ::ndk::ScopedAStatus(AStatus_newOk()); 484 } 485 #endif 486 }; 487 *_aidl_return = SharedRefBase::make<MyCompatTest>()->asBinder(); 488 return ::ndk::ScopedAStatus(AStatus_newOk()); 489 } 490 getLegacyBinderTest(::ndk::SpAIBinder * _aidl_return)491 ::ndk::ScopedAStatus getLegacyBinderTest(::ndk::SpAIBinder* _aidl_return) { 492 *_aidl_return = ::ndk::SpAIBinder(AIBinder_new(kLegacyBinderClass, nullptr)); 493 return ::ndk::ScopedAStatus(AStatus_newOk()); 494 } 495 RepeatExtendableParcelable(const::aidl::test_package::ExtendableParcelable & in_input,::aidl::test_package::ExtendableParcelable * out_output)496 ::ndk::ScopedAStatus RepeatExtendableParcelable( 497 const ::aidl::test_package::ExtendableParcelable& in_input, 498 ::aidl::test_package::ExtendableParcelable* out_output) { 499 RepeatExtendableParcelableWithoutExtension(in_input, out_output); 500 std::optional<MyExt> ext; 501 in_input.ext.getParcelable(&ext); 502 MyExt ext2; 503 ext2.a = ext->a; 504 ext2.b = ext->b; 505 out_output->ext.setParcelable(ext2); 506 return ::ndk::ScopedAStatus(AStatus_newOk()); 507 } 508 RepeatExtendableParcelableWithoutExtension(const::aidl::test_package::ExtendableParcelable & in_input,::aidl::test_package::ExtendableParcelable * out_output)509 ::ndk::ScopedAStatus RepeatExtendableParcelableWithoutExtension( 510 const ::aidl::test_package::ExtendableParcelable& in_input, 511 ::aidl::test_package::ExtendableParcelable* out_output) { 512 out_output->a = in_input.a; 513 out_output->b = in_input.b; 514 out_output->c = in_input.c; 515 return ::ndk::ScopedAStatus(AStatus_newOk()); 516 } 517 RepeatSimpleUnion(const SimpleUnion & in_u,SimpleUnion * _aidl_return)518 ::ndk::ScopedAStatus RepeatSimpleUnion(const SimpleUnion& in_u, 519 SimpleUnion* _aidl_return) override { 520 *_aidl_return = in_u; 521 return ::ndk::ScopedAStatus(AStatus_newOk()); 522 } 523 repeatFoo(const Foo & in_inFoo,Foo * _aidl_return)524 ::ndk::ScopedAStatus repeatFoo(const Foo& in_inFoo, Foo* _aidl_return) { 525 *_aidl_return = in_inFoo; 526 return ::ndk::ScopedAStatus(AStatus_newOk()); 527 } 528 renameFoo(Foo * in_foo,const std::string & in_name)529 ::ndk::ScopedAStatus renameFoo(Foo* in_foo, const std::string& in_name) { 530 in_foo->a = in_name; 531 return ::ndk::ScopedAStatus(AStatus_newOk()); 532 } 533 renameBar(Foo * in_foo,const std::string & in_name)534 ::ndk::ScopedAStatus renameBar(Foo* in_foo, const std::string& in_name) { 535 in_foo->d.a = in_name; 536 return ::ndk::ScopedAStatus(AStatus_newOk()); 537 } 538 getF(const Foo & foo,int32_t * _aidl_return)539 ::ndk::ScopedAStatus getF(const Foo& foo, int32_t* _aidl_return) { 540 *_aidl_return = foo.f; 541 return ::ndk::ScopedAStatus(AStatus_newOk()); 542 } 543 repeatGenericBar(const::aidl::test_package::GenericBar<int32_t> & in_inFoo,::aidl::test_package::GenericBar<int32_t> * _aidl_return)544 ::ndk::ScopedAStatus repeatGenericBar(const ::aidl::test_package::GenericBar<int32_t>& in_inFoo, 545 ::aidl::test_package::GenericBar<int32_t>* _aidl_return) { 546 *_aidl_return = in_inFoo; 547 return ::ndk::ScopedAStatus(AStatus_newOk()); 548 } 549 }; 550