HidlTransportUtils.h revision a7b2bb72eb9ed9345307c80ecc3386338ecddb9f
1/* 2 * Copyright (C) 2016 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#ifndef ANDROID_HIDL_TRANSPORT_UTILS_H 18#define ANDROID_HIDL_TRANSPORT_UTILS_H 19 20#include <android/hidl/base/1.0/IBase.h> 21 22namespace android { 23namespace hardware { 24namespace details { 25 26/* 27 * Verifies the interface chain of 'interface' contains 'castTo' 28 * @param emitError if emitError is false, return Return<bool>{false} on error; if emitError 29 * is true, the Return<bool> object contains the actual error. 30 */ 31inline Return<bool> canCastInterface(::android::hidl::base::V1_0::IBase* interface, 32 const char* castTo, bool emitError = false) { 33 if (interface == nullptr) { 34 return false; 35 } 36 37 bool canCast = false; 38 auto chainRet = interface->interfaceChain([&](const hidl_vec<hidl_string> &types) { 39 for (size_t i = 0; i < types.size(); i++) { 40 if (types[i] == castTo) { 41 canCast = true; 42 break; 43 } 44 } 45 }); 46 47 if (!chainRet.isOk()) { 48 // call fails, propagate the error if emitError 49 return emitError 50 ? details::StatusOf<void, bool>(chainRet) 51 : Return<bool>(false); 52 } 53 54 return canCast; 55} 56 57inline std::string getDescriptor(::android::hidl::base::V1_0::IBase* interface) { 58 std::string myDescriptor{}; 59 auto ret = interface->interfaceDescriptor([&](const hidl_string &types) { 60 myDescriptor = types.c_str(); 61 }); 62 ret.isOk(); // ignored, return empty string if not isOk() 63 return myDescriptor; 64} 65 66} // namespace details 67} // namespace hardware 68} // namespace android 69 70#endif //ANDROID_HIDL_TRANSPORT_UTILS_H 71