Binder.h revision 83c0446f27b9542d6c2e724817b2b2d8d1f55085
1/*
2 * Copyright (C) 2008 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_BINDER_H
18#define ANDROID_BINDER_H
19
20#include <binder/IBinder.h>
21
22// ---------------------------------------------------------------------------
23namespace android {
24
25class BBinder : public IBinder
26{
27public:
28                        BBinder();
29
30    virtual const String16& getInterfaceDescriptor() const;
31    virtual bool        isBinderAlive() const;
32    virtual status_t    pingBinder();
33    virtual status_t    dump(int fd, const Vector<String16>& args);
34
35    virtual status_t    transact(   uint32_t code,
36                                    const Parcel& data,
37                                    Parcel* reply,
38                                    uint32_t flags = 0);
39
40    virtual status_t    linkToDeath(const sp<DeathRecipient>& recipient,
41                                    void* cookie = NULL,
42                                    uint32_t flags = 0);
43
44    virtual status_t    unlinkToDeath(  const wp<DeathRecipient>& recipient,
45                                        void* cookie = NULL,
46                                        uint32_t flags = 0,
47                                        wp<DeathRecipient>* outRecipient = NULL);
48
49    virtual void        attachObject(   const void* objectID,
50                                        void* object,
51                                        void* cleanupCookie,
52                                        object_cleanup_func func);
53    virtual void*       findObject(const void* objectID) const;
54    virtual void        detachObject(const void* objectID);
55
56    virtual BBinder*    localBinder();
57
58protected:
59    virtual             ~BBinder();
60
61    virtual status_t    onTransact( uint32_t code,
62                                    const Parcel& data,
63                                    Parcel* reply,
64                                    uint32_t flags = 0);
65
66private:
67                        BBinder(const BBinder& o);
68            BBinder&    operator=(const BBinder& o);
69
70    class Extras;
71
72            Extras*     mExtras;
73            void*       mReserved0;
74    static  String16    sEmptyDescriptor;
75};
76
77// ---------------------------------------------------------------------------
78
79class BpRefBase : public virtual RefBase
80{
81protected:
82                            BpRefBase(const sp<IBinder>& o);
83    virtual                 ~BpRefBase();
84    virtual void            onFirstRef();
85    virtual void            onLastStrongRef(const void* id);
86    virtual bool            onIncStrongAttempted(uint32_t flags, const void* id);
87
88    inline  IBinder*        remote()                { return mRemote; }
89    inline  IBinder*        remote() const          { return mRemote; }
90
91private:
92                            BpRefBase(const BpRefBase& o);
93    BpRefBase&              operator=(const BpRefBase& o);
94
95    IBinder* const          mRemote;
96    RefBase::weakref_type*  mRefs;
97    volatile int32_t        mState;
98};
99
100}; // namespace android
101
102// ---------------------------------------------------------------------------
103
104#endif // ANDROID_BINDER_H
105