aboutsummaryrefslogtreecommitdiff
path: root/include/kdbinder/binder/Binder.h
blob: 9e0838aaa6e2bcb669a2ced38853d5a7ebc83fc6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/*
 * Copyright (C) 2016 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef INCLUDE_KDBINDER_BINDER_BINDER_H_
#define INCLUDE_KDBINDER_BINDER_BINDER_H_

#include <binder/IBinder.h>
#include <utils/Errors.h>
#include <utils/String16.h>

namespace android {

class BBinder : public IBinder {
 public:
  BBinder();

  virtual const String16& getInterfaceDescriptor() const;
  bool isBinderAlive() const override;

  status_t transact(uint32_t code,
                    const Parcel& data,
                    Parcel* reply,
                    uint32_t flags = 0) override;
  BBinder* localBinder() override;
  status_t pingBinder() override;

  status_t linkToDeath(const sp<DeathRecipient>& recipient,
                       void* cookie = NULL,
                       uint32_t flags = 0) override;

  status_t unlinkToDeath(const wp<DeathRecipient>& recipient,
                         void* cookie = NULL,
                         uint32_t flags = 0,
                         wp<DeathRecipient>* outRecipient = NULL) override;

 protected:
  virtual ~BBinder();
  virtual status_t onTransact(uint32_t code,
                              const Parcel& data,
                              Parcel* reply,
                              uint32_t flags = 0);

 private:
  BBinder(const BBinder& o);
  BBinder& operator=(const BBinder& o);
};

class BpRefBase : public virtual RefBase {
 protected:
  explicit BpRefBase(const sp<IBinder>& o);
  virtual ~BpRefBase();
  void onFirstRef() override;
  void onLastStrongRef(const void* id) override;
  bool onIncStrongAttempted(uint32_t flags, const void* id) override;

  inline IBinder* remote() {
    return mRemote;
  }
  inline IBinder* remote() const {
    return mRemote;
  }

 private:
  BpRefBase(const BpRefBase& o);
  BpRefBase& operator=(const BpRefBase& o);

  IBinder* const mRemote;
  RefBase::weakref_type* mRefs;
  volatile int32_t mState;
};

}  // namespace android

#endif  // INCLUDE_KDBINDER_BINDER_BINDER_H_