1/* 2 * Copyright (C) 2017 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#define LOG_TAG "LowpanProvision" 18 19#include <android/net/lowpan/LowpanProvision.h> 20 21#include <binder/Parcel.h> 22#include <log/log.h> 23#include <utils/Errors.h> 24 25using android::BAD_TYPE; 26using android::BAD_VALUE; 27using android::NO_ERROR; 28using android::Parcel; 29using android::status_t; 30using android::UNEXPECTED_NULL; 31using android::net::lowpan::LowpanProvision; 32using namespace ::android::binder; 33 34namespace android { 35 36namespace net { 37 38namespace lowpan { 39 40#define RETURN_IF_FAILED(calledOnce) \ 41 { \ 42 status_t returnStatus = calledOnce; \ 43 if (returnStatus) { \ 44 ALOGE("Failed at %s:%d (%s)", __FILE__, __LINE__, __func__); \ 45 return returnStatus; \ 46 } \ 47 } 48LowpanProvision::LowpanProvision(const LowpanIdentity& identity, const LowpanCredential& credential) 49 : mIdentity(identity), mCredential(credential), mHasCredential(true) 50{ 51} 52 53LowpanProvision::LowpanProvision(const LowpanIdentity& identity) 54 : mIdentity(identity), mHasCredential(false) 55{ 56} 57 58const LowpanIdentity* LowpanProvision::getLowpanIdentity() const { 59 return &mIdentity; 60} 61 62const LowpanCredential* LowpanProvision::getLowpanCredential() const { 63 return mHasCredential 64 ? &mCredential 65 : NULL; 66} 67 68status_t LowpanProvision::writeToParcel(Parcel* parcel) const { 69 /* 70 * Keep implementation in sync with writeToParcel() in 71 * frameworks/base/lowpan/java/android/net/android/net/lowpan/LowpanProvision.java. 72 */ 73 74 RETURN_IF_FAILED(mIdentity.writeToParcel(parcel)); 75 RETURN_IF_FAILED(parcel->writeBool(mHasCredential)); 76 77 if (mHasCredential) { 78 RETURN_IF_FAILED(mCredential.writeToParcel(parcel)); 79 } 80 81 return NO_ERROR; 82} 83 84status_t LowpanProvision::readFromParcel(const Parcel* parcel) { 85 /* 86 * Keep implementation in sync with readFromParcel() in 87 * frameworks/base/lowpan/java/android/net/android/net/lowpan/LowpanProvision.java. 88 */ 89 90 RETURN_IF_FAILED(mIdentity.readFromParcel(parcel)); 91 RETURN_IF_FAILED(parcel->readBool(&mHasCredential)); 92 93 if (mHasCredential) { 94 RETURN_IF_FAILED(mCredential.readFromParcel(parcel)); 95 } 96 97 return NO_ERROR; 98} 99 100bool LowpanProvision::operator==(const LowpanProvision& rhs) 101{ 102 if (mIdentity != rhs.mIdentity) { 103 return false; 104 } 105 106 if (mHasCredential != rhs.mHasCredential) { 107 return false; 108 } 109 110 if (mHasCredential && mCredential != rhs.mCredential) { 111 return false; 112 } 113 114 return true; 115} 116 117} // namespace lowpan 118 119} // namespace net 120 121} // namespace android 122