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 } RenamePolygon(RegularPolygon * value,const std::string & newName)223 ::ndk::ScopedAStatus RenamePolygon(RegularPolygon* value, 224 const std::string& newName) override { 225 value->name = newName; 226 return ::ndk::ScopedAStatus(AStatus_newOk()); 227 } RepeatBooleanArray(const std::vector<bool> & in_value,std::vector<bool> * out_repeated,std::vector<bool> * _aidl_return)228 ::ndk::ScopedAStatus RepeatBooleanArray( 229 const std::vector<bool>& in_value, std::vector<bool>* out_repeated, 230 std::vector<bool>* _aidl_return) override { 231 *out_repeated = in_value; 232 *_aidl_return = in_value; 233 return ::ndk::ScopedAStatus(AStatus_newOk()); 234 } RepeatByteArray(const std::vector<uint8_t> & in_value,std::vector<uint8_t> * out_repeated,std::vector<uint8_t> * _aidl_return)235 ::ndk::ScopedAStatus RepeatByteArray(const std::vector<uint8_t>& in_value, 236 std::vector<uint8_t>* out_repeated, 237 std::vector<uint8_t>* _aidl_return) override { 238 *out_repeated = in_value; 239 *_aidl_return = in_value; 240 return ::ndk::ScopedAStatus(AStatus_newOk()); 241 } RepeatCharArray(const std::vector<char16_t> & in_value,std::vector<char16_t> * out_repeated,std::vector<char16_t> * _aidl_return)242 ::ndk::ScopedAStatus RepeatCharArray( 243 const std::vector<char16_t>& in_value, 244 std::vector<char16_t>* out_repeated, 245 std::vector<char16_t>* _aidl_return) override { 246 *out_repeated = in_value; 247 *_aidl_return = in_value; 248 return ::ndk::ScopedAStatus(AStatus_newOk()); 249 } RepeatIntArray(const std::vector<int32_t> & in_value,std::vector<int32_t> * out_repeated,std::vector<int32_t> * _aidl_return)250 ::ndk::ScopedAStatus RepeatIntArray( 251 const std::vector<int32_t>& in_value, std::vector<int32_t>* out_repeated, 252 std::vector<int32_t>* _aidl_return) override { 253 *out_repeated = in_value; 254 *_aidl_return = in_value; 255 return ::ndk::ScopedAStatus(AStatus_newOk()); 256 } RepeatLongArray(const std::vector<int64_t> & in_value,std::vector<int64_t> * out_repeated,std::vector<int64_t> * _aidl_return)257 ::ndk::ScopedAStatus RepeatLongArray( 258 const std::vector<int64_t>& in_value, std::vector<int64_t>* out_repeated, 259 std::vector<int64_t>* _aidl_return) override { 260 *out_repeated = in_value; 261 *_aidl_return = in_value; 262 return ::ndk::ScopedAStatus(AStatus_newOk()); 263 } RepeatFloatArray(const std::vector<float> & in_value,std::vector<float> * out_repeated,std::vector<float> * _aidl_return)264 ::ndk::ScopedAStatus RepeatFloatArray( 265 const std::vector<float>& in_value, std::vector<float>* out_repeated, 266 std::vector<float>* _aidl_return) override { 267 *out_repeated = in_value; 268 *_aidl_return = in_value; 269 return ::ndk::ScopedAStatus(AStatus_newOk()); 270 } RepeatDoubleArray(const std::vector<double> & in_value,std::vector<double> * out_repeated,std::vector<double> * _aidl_return)271 ::ndk::ScopedAStatus RepeatDoubleArray( 272 const std::vector<double>& in_value, std::vector<double>* out_repeated, 273 std::vector<double>* _aidl_return) override { 274 *out_repeated = in_value; 275 *_aidl_return = in_value; 276 return ::ndk::ScopedAStatus(AStatus_newOk()); 277 } RepeatByteEnumArray(const std::vector<ByteEnum> & in_value,std::vector<ByteEnum> * out_repeated,std::vector<ByteEnum> * _aidl_return)278 ::ndk::ScopedAStatus RepeatByteEnumArray(const std::vector<ByteEnum>& in_value, 279 std::vector<ByteEnum>* out_repeated, 280 std::vector<ByteEnum>* _aidl_return) override { 281 *out_repeated = in_value; 282 *_aidl_return = in_value; 283 return ::ndk::ScopedAStatus(AStatus_newOk()); 284 } RepeatIntEnumArray(const std::vector<IntEnum> & in_value,std::vector<IntEnum> * out_repeated,std::vector<IntEnum> * _aidl_return)285 ::ndk::ScopedAStatus RepeatIntEnumArray(const std::vector<IntEnum>& in_value, 286 std::vector<IntEnum>* out_repeated, 287 std::vector<IntEnum>* _aidl_return) override { 288 *out_repeated = in_value; 289 *_aidl_return = in_value; 290 return ::ndk::ScopedAStatus(AStatus_newOk()); 291 } RepeatLongEnumArray(const std::vector<LongEnum> & in_value,std::vector<LongEnum> * out_repeated,std::vector<LongEnum> * _aidl_return)292 ::ndk::ScopedAStatus RepeatLongEnumArray(const std::vector<LongEnum>& in_value, 293 std::vector<LongEnum>* out_repeated, 294 std::vector<LongEnum>* _aidl_return) override { 295 *out_repeated = in_value; 296 *_aidl_return = in_value; 297 return ::ndk::ScopedAStatus(AStatus_newOk()); 298 } RepeatStringArray(const std::vector<std::string> & in_value,std::vector<std::string> * out_repeated,std::vector<std::string> * _aidl_return)299 ::ndk::ScopedAStatus RepeatStringArray( 300 const std::vector<std::string>& in_value, 301 std::vector<std::string>* out_repeated, 302 std::vector<std::string>* _aidl_return) override { 303 *out_repeated = in_value; 304 *_aidl_return = in_value; 305 return ::ndk::ScopedAStatus(AStatus_newOk()); 306 } RepeatRegularPolygonArray(const std::vector<RegularPolygon> & in_value,std::vector<RegularPolygon> * out_repeated,std::vector<RegularPolygon> * _aidl_return)307 ::ndk::ScopedAStatus RepeatRegularPolygonArray( 308 const std::vector<RegularPolygon>& in_value, std::vector<RegularPolygon>* out_repeated, 309 std::vector<RegularPolygon>* _aidl_return) override { 310 *out_repeated = in_value; 311 *_aidl_return = in_value; 312 return ::ndk::ScopedAStatus(AStatus_newOk()); 313 } 314 RepeatBinderArray(const std::vector<::ndk::SpAIBinder> & in_value,std::vector<::ndk::SpAIBinder> * out_repeated,std::vector<::ndk::SpAIBinder> * _aidl_return)315 ::ndk::ScopedAStatus RepeatBinderArray(const std::vector<::ndk::SpAIBinder>& in_value, 316 std::vector<::ndk::SpAIBinder>* out_repeated, 317 std::vector<::ndk::SpAIBinder>* _aidl_return) override { 318 *out_repeated = in_value; 319 *_aidl_return = in_value; 320 return ::ndk::ScopedAStatus(AStatus_newOk()); 321 } 322 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)323 ::ndk::ScopedAStatus RepeatInterfaceArray( 324 const std::vector<std::shared_ptr<IEmpty>>& in_value, 325 std::vector<std::shared_ptr<IEmpty>>* out_repeated, 326 std::vector<std::shared_ptr<IEmpty>>* _aidl_return) override { 327 *out_repeated = in_value; 328 *_aidl_return = in_value; 329 return ::ndk::ScopedAStatus(AStatus_newOk()); 330 } 331 Repeat2StringList(const std::vector<std::string> & in_input,std::vector<std::string> * out_repeated,std::vector<std::string> * _aidl_return)332 ::ndk::ScopedAStatus Repeat2StringList(const std::vector<std::string>& in_input, 333 std::vector<std::string>* out_repeated, 334 std::vector<std::string>* _aidl_return) override { 335 *out_repeated = std::vector<std::string>(); 336 *_aidl_return = std::vector<std::string>(); 337 for (int i = 0; i < 2; i++) { 338 for (auto& s : in_input) { 339 out_repeated->emplace_back(s); 340 _aidl_return->emplace_back(s); 341 } 342 } 343 344 return ::ndk::ScopedAStatus(AStatus_newOk()); 345 } 346 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)347 ::ndk::ScopedAStatus Repeat2RegularPolygonList( 348 const std::vector<::aidl::test_package::RegularPolygon>& in_input, 349 std::vector<::aidl::test_package::RegularPolygon>* out_repeated, 350 std::vector<::aidl::test_package::RegularPolygon>* _aidl_return) override { 351 *out_repeated = std::vector<::aidl::test_package::RegularPolygon>(); 352 *_aidl_return = std::vector<::aidl::test_package::RegularPolygon>(); 353 for (int i = 0; i < 2; i++) { 354 for (auto& s : in_input) { 355 out_repeated->emplace_back(s); 356 _aidl_return->emplace_back(s); 357 } 358 } 359 return ::ndk::ScopedAStatus(AStatus_newOk()); 360 } 361 RepeatNullableBooleanArray(const std::optional<std::vector<bool>> & in_value,std::optional<std::vector<bool>> * _aidl_return)362 ::ndk::ScopedAStatus RepeatNullableBooleanArray( 363 const std::optional<std::vector<bool>>& in_value, 364 std::optional<std::vector<bool>>* _aidl_return) override { 365 *_aidl_return = in_value; 366 return ::ndk::ScopedAStatus(AStatus_newOk()); 367 } RepeatNullableByteArray(const std::optional<std::vector<uint8_t>> & in_value,std::optional<std::vector<uint8_t>> * _aidl_return)368 ::ndk::ScopedAStatus RepeatNullableByteArray( 369 const std::optional<std::vector<uint8_t>>& in_value, 370 std::optional<std::vector<uint8_t>>* _aidl_return) override { 371 *_aidl_return = in_value; 372 return ::ndk::ScopedAStatus(AStatus_newOk()); 373 } RepeatNullableCharArray(const std::optional<std::vector<char16_t>> & in_value,std::optional<std::vector<char16_t>> * _aidl_return)374 ::ndk::ScopedAStatus RepeatNullableCharArray( 375 const std::optional<std::vector<char16_t>>& in_value, 376 std::optional<std::vector<char16_t>>* _aidl_return) override { 377 *_aidl_return = in_value; 378 return ::ndk::ScopedAStatus(AStatus_newOk()); 379 } RepeatNullableIntArray(const std::optional<std::vector<int32_t>> & in_value,std::optional<std::vector<int32_t>> * _aidl_return)380 ::ndk::ScopedAStatus RepeatNullableIntArray( 381 const std::optional<std::vector<int32_t>>& in_value, 382 std::optional<std::vector<int32_t>>* _aidl_return) override { 383 *_aidl_return = in_value; 384 return ::ndk::ScopedAStatus(AStatus_newOk()); 385 } RepeatNullableLongArray(const std::optional<std::vector<int64_t>> & in_value,std::optional<std::vector<int64_t>> * _aidl_return)386 ::ndk::ScopedAStatus RepeatNullableLongArray( 387 const std::optional<std::vector<int64_t>>& in_value, 388 std::optional<std::vector<int64_t>>* _aidl_return) override { 389 *_aidl_return = in_value; 390 return ::ndk::ScopedAStatus(AStatus_newOk()); 391 } RepeatNullableFloatArray(const std::optional<std::vector<float>> & in_value,std::optional<std::vector<float>> * _aidl_return)392 ::ndk::ScopedAStatus RepeatNullableFloatArray( 393 const std::optional<std::vector<float>>& in_value, 394 std::optional<std::vector<float>>* _aidl_return) override { 395 *_aidl_return = in_value; 396 return ::ndk::ScopedAStatus(AStatus_newOk()); 397 } RepeatNullableDoubleArray(const std::optional<std::vector<double>> & in_value,std::optional<std::vector<double>> * _aidl_return)398 ::ndk::ScopedAStatus RepeatNullableDoubleArray( 399 const std::optional<std::vector<double>>& in_value, 400 std::optional<std::vector<double>>* _aidl_return) override { 401 *_aidl_return = in_value; 402 return ::ndk::ScopedAStatus(AStatus_newOk()); 403 } RepeatNullableByteEnumArray(const std::optional<std::vector<ByteEnum>> & in_value,std::optional<std::vector<ByteEnum>> * _aidl_return)404 ::ndk::ScopedAStatus RepeatNullableByteEnumArray( 405 const std::optional<std::vector<ByteEnum>>& in_value, 406 std::optional<std::vector<ByteEnum>>* _aidl_return) override { 407 *_aidl_return = in_value; 408 return ::ndk::ScopedAStatus(AStatus_newOk()); 409 } RepeatNullableIntEnumArray(const std::optional<std::vector<IntEnum>> & in_value,std::optional<std::vector<IntEnum>> * _aidl_return)410 ::ndk::ScopedAStatus RepeatNullableIntEnumArray( 411 const std::optional<std::vector<IntEnum>>& in_value, 412 std::optional<std::vector<IntEnum>>* _aidl_return) override { 413 *_aidl_return = in_value; 414 return ::ndk::ScopedAStatus(AStatus_newOk()); 415 } RepeatNullableLongEnumArray(const std::optional<std::vector<LongEnum>> & in_value,std::optional<std::vector<LongEnum>> * _aidl_return)416 ::ndk::ScopedAStatus RepeatNullableLongEnumArray( 417 const std::optional<std::vector<LongEnum>>& in_value, 418 std::optional<std::vector<LongEnum>>* _aidl_return) override { 419 *_aidl_return = in_value; 420 return ::ndk::ScopedAStatus(AStatus_newOk()); 421 } RepeatNullableStringArray(const std::optional<std::vector<std::optional<std::string>>> & in_value,std::optional<std::vector<std::optional<std::string>>> * _aidl_return)422 ::ndk::ScopedAStatus RepeatNullableStringArray( 423 const std::optional<std::vector<std::optional<std::string>>>& in_value, 424 std::optional<std::vector<std::optional<std::string>>>* _aidl_return) { 425 *_aidl_return = in_value; 426 return ::ndk::ScopedAStatus(AStatus_newOk()); 427 } RepeatNullableBinderArray(const std::optional<std::vector<::ndk::SpAIBinder>> & in_value,std::optional<std::vector<::ndk::SpAIBinder>> * _aidl_return)428 ::ndk::ScopedAStatus RepeatNullableBinderArray( 429 const std::optional<std::vector<::ndk::SpAIBinder>>& in_value, 430 std::optional<std::vector<::ndk::SpAIBinder>>* _aidl_return) override { 431 *_aidl_return = in_value; 432 return ::ndk::ScopedAStatus(AStatus_newOk()); 433 } RepeatNullableInterfaceArray(const std::optional<std::vector<std::shared_ptr<IEmpty>>> & in_value,std::optional<std::vector<std::shared_ptr<IEmpty>>> * _aidl_return)434 ::ndk::ScopedAStatus RepeatNullableInterfaceArray( 435 const std::optional<std::vector<std::shared_ptr<IEmpty>>>& in_value, 436 std::optional<std::vector<std::shared_ptr<IEmpty>>>* _aidl_return) override { 437 *_aidl_return = in_value; 438 return ::ndk::ScopedAStatus(AStatus_newOk()); 439 } 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)440 ::ndk::ScopedAStatus DoubleRepeatNullableStringArray( 441 const std::optional<std::vector<std::optional<std::string>>>& in_value, 442 std::optional<std::vector<std::optional<std::string>>>* out_repeated, 443 std::optional<std::vector<std::optional<std::string>>>* _aidl_return) 444 override { 445 *out_repeated = in_value; 446 *_aidl_return = in_value; 447 return ::ndk::ScopedAStatus(AStatus_newOk()); 448 } 449 getICompatTest(::ndk::SpAIBinder * _aidl_return)450 ::ndk::ScopedAStatus getICompatTest(::ndk::SpAIBinder* _aidl_return) { 451 class MyCompatTest : public ::aidl::test_package::BnCompatTest { 452 public: 453 ::ndk::ScopedAStatus repeatBaz(const ::aidl::test_package::Baz& in_inBaz, 454 ::aidl::test_package::Baz* _aidl_return) override { 455 *_aidl_return = in_inBaz; 456 return ::ndk::ScopedAStatus(AStatus_newOk()); 457 } 458 459 #ifdef USING_VERSION_1 460 ::ndk::ScopedAStatus RepeatStringNullableLater(const std::string& in_value, 461 std::string* _aidl_return) override { 462 *_aidl_return = in_value; 463 return ::ndk::ScopedAStatus(AStatus_newOk()); 464 } 465 #else 466 ::ndk::ScopedAStatus RepeatStringNullableLater( 467 const std::optional<std::string>& in_value, 468 std::optional<std::string>* _aidl_return) override { 469 *_aidl_return = in_value; 470 return ::ndk::ScopedAStatus(AStatus_newOk()); 471 } 472 #endif 473 474 #ifndef USING_VERSION_1 475 ::ndk::ScopedAStatus NewMethodThatReturns10(int32_t* _aidl_return) override { 476 *_aidl_return = 10; 477 return ::ndk::ScopedAStatus(AStatus_newOk()); 478 } 479 #endif 480 }; 481 *_aidl_return = SharedRefBase::make<MyCompatTest>()->asBinder(); 482 return ::ndk::ScopedAStatus(AStatus_newOk()); 483 } 484 getLegacyBinderTest(::ndk::SpAIBinder * _aidl_return)485 ::ndk::ScopedAStatus getLegacyBinderTest(::ndk::SpAIBinder* _aidl_return) { 486 *_aidl_return = ::ndk::SpAIBinder(AIBinder_new(kLegacyBinderClass, nullptr)); 487 return ::ndk::ScopedAStatus(AStatus_newOk()); 488 } 489 RepeatExtendableParcelable(const::aidl::test_package::ExtendableParcelable & in_input,::aidl::test_package::ExtendableParcelable * out_output)490 ::ndk::ScopedAStatus RepeatExtendableParcelable( 491 const ::aidl::test_package::ExtendableParcelable& in_input, 492 ::aidl::test_package::ExtendableParcelable* out_output) { 493 RepeatExtendableParcelableWithoutExtension(in_input, out_output); 494 std::optional<MyExt> ext; 495 in_input.ext.getParcelable(&ext); 496 MyExt ext2; 497 ext2.a = ext->a; 498 ext2.b = ext->b; 499 out_output->ext.setParcelable(ext2); 500 return ::ndk::ScopedAStatus(AStatus_newOk()); 501 } 502 RepeatExtendableParcelableWithoutExtension(const::aidl::test_package::ExtendableParcelable & in_input,::aidl::test_package::ExtendableParcelable * out_output)503 ::ndk::ScopedAStatus RepeatExtendableParcelableWithoutExtension( 504 const ::aidl::test_package::ExtendableParcelable& in_input, 505 ::aidl::test_package::ExtendableParcelable* out_output) { 506 out_output->a = in_input.a; 507 out_output->b = in_input.b; 508 out_output->c = in_input.c; 509 return ::ndk::ScopedAStatus(AStatus_newOk()); 510 } 511 RepeatSimpleUnion(const SimpleUnion & in_u,SimpleUnion * _aidl_return)512 ::ndk::ScopedAStatus RepeatSimpleUnion(const SimpleUnion& in_u, 513 SimpleUnion* _aidl_return) override { 514 *_aidl_return = in_u; 515 return ::ndk::ScopedAStatus(AStatus_newOk()); 516 } 517 repeatFoo(const Foo & in_inFoo,Foo * _aidl_return)518 ::ndk::ScopedAStatus repeatFoo(const Foo& in_inFoo, Foo* _aidl_return) { 519 *_aidl_return = in_inFoo; 520 return ::ndk::ScopedAStatus(AStatus_newOk()); 521 } 522 renameFoo(Foo * in_foo,const std::string & in_name)523 ::ndk::ScopedAStatus renameFoo(Foo* in_foo, const std::string& in_name) { 524 in_foo->a = in_name; 525 return ::ndk::ScopedAStatus(AStatus_newOk()); 526 } 527 renameBar(Foo * in_foo,const std::string & in_name)528 ::ndk::ScopedAStatus renameBar(Foo* in_foo, const std::string& in_name) { 529 in_foo->d.a = in_name; 530 return ::ndk::ScopedAStatus(AStatus_newOk()); 531 } 532 getF(const Foo & foo,int32_t * _aidl_return)533 ::ndk::ScopedAStatus getF(const Foo& foo, int32_t* _aidl_return) { 534 *_aidl_return = foo.f; 535 return ::ndk::ScopedAStatus(AStatus_newOk()); 536 } 537 repeatGenericBar(const::aidl::test_package::GenericBar<int32_t> & in_inFoo,::aidl::test_package::GenericBar<int32_t> * _aidl_return)538 ::ndk::ScopedAStatus repeatGenericBar(const ::aidl::test_package::GenericBar<int32_t>& in_inFoo, 539 ::aidl::test_package::GenericBar<int32_t>* _aidl_return) { 540 *_aidl_return = in_inFoo; 541 return ::ndk::ScopedAStatus(AStatus_newOk()); 542 } 543 }; 544