1 /*
2  * Copyright (C) 2019 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 #pragma once
17 
18 #include <android/binder_auto_utils.h>
19 #include <vector>
20 
21 #include <android/binder_libbinder.h>
22 #include <android/binder_parcel.h>
23 #include "parcel_fuzzer.h"
24 
25 class NdkParcelAdapter {
26 public:
NdkParcelAdapter()27     NdkParcelAdapter() : mParcel(AParcel_create()) {}
28 
aParcel()29     const AParcel* aParcel() const { return mParcel.get(); }
aParcel()30     AParcel* aParcel() { return mParcel.get(); }
31 
parcel()32     const android::Parcel* parcel() const { return AParcel_viewPlatformParcel(aParcel()); }
parcel()33     android::Parcel* parcel() { return AParcel_viewPlatformParcel(aParcel()); }
34 
data()35     const uint8_t* data() const { return parcel()->data(); }
dataSize()36     size_t dataSize() const { return parcel()->dataSize(); }
dataAvail()37     size_t dataAvail() const { return parcel()->dataAvail(); }
dataPosition()38     size_t dataPosition() const { return parcel()->dataPosition(); }
dataCapacity()39     size_t dataCapacity() const { return parcel()->dataCapacity(); }
setData(const uint8_t * buffer,size_t len)40     android::status_t setData(const uint8_t* buffer, size_t len) {
41         return parcel()->setData(buffer, len);
42     }
43 
appendFrom(const NdkParcelAdapter * parcel,int32_t start,int32_t len)44     android::status_t appendFrom(const NdkParcelAdapter* parcel, int32_t start, int32_t len) {
45         return AParcel_appendFrom(parcel->aParcel(), aParcel(), start, len);
46     }
47 
48 private:
49     ndk::ScopedAParcel mParcel;
50 };
51 
52 extern std::vector<ParcelRead<NdkParcelAdapter>> BINDER_NDK_PARCEL_READ_FUNCTIONS;
53