IPCThreadState.h revision c5b2c0bf8007562536b822eb060fc54a01f8e08b
1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/*
2edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Copyright (C) 2005 The Android Open Source Project
3edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *
4edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * you may not use this file except in compliance with the License.
6edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * You may obtain a copy of the License at
7edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *
8edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *
10edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * See the License for the specific language governing permissions and
14edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * limitations under the License.
15edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */
16edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
17edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#ifndef ANDROID_IPC_THREAD_STATE_H
18edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#define ANDROID_IPC_THREAD_STATE_H
19edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
20edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/Errors.h>
21c5b2c0bf8007562536b822eb060fc54a01f8e08bMathias Agopian#include <binder/Parcel.h>
22c5b2c0bf8007562536b822eb060fc54a01f8e08bMathias Agopian#include <binder/ProcessState.h>
23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/Vector.h>
24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
25edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#ifdef HAVE_WIN32_PROC
26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttypedef  int  uid_t;
27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif
28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
30edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android {
31edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
32edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass IPCThreadState
33edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
34edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic:
35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    static  IPCThreadState*     self();
36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            sp<ProcessState>    process();
38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            status_t            clearLastError();
40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            int                 getCallingPid();
42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            int                 getCallingUid();
43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            int64_t             clearCallingIdentity();
45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void                restoreCallingIdentity(int64_t token);
46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void                flushCommands();
48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
49edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void                joinThreadPool(bool isMain = true);
50edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
51edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            // Stop the local process.
52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void                stopProcess(bool immediate = true);
53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            status_t            transact(int32_t handle,
55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                         uint32_t code, const Parcel& data,
56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                         Parcel* reply, uint32_t flags);
57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void                incStrongHandle(int32_t handle);
59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void                decStrongHandle(int32_t handle);
60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void                incWeakHandle(int32_t handle);
61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void                decWeakHandle(int32_t handle);
62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            status_t            attemptIncStrongHandle(int32_t handle);
63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    static  void                expungeHandle(int32_t handle, IBinder* binder);
64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            status_t            requestDeathNotification(   int32_t handle,
65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                                            BpBinder* proxy);
66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            status_t            clearDeathNotification( int32_t handle,
67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                                        BpBinder* proxy);
68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    static  void                shutdown();
70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate:
72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                IPCThreadState();
73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                ~IPCThreadState();
74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            status_t            sendReply(const Parcel& reply, uint32_t flags);
76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            status_t            waitForResponse(Parcel *reply,
77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                                status_t *acquireResult=NULL);
78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            status_t            talkWithDriver(bool doReceive=true);
79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            status_t            writeTransactionData(int32_t cmd,
80edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                                     uint32_t binderFlags,
81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                                     int32_t handle,
82edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                                     uint32_t code,
83edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                                     const Parcel& data,
84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                                     status_t* statusBuffer);
85edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            status_t            executeCommand(int32_t command);
86edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
87edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void                clearCaller();
88edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
89edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    static  void                threadDestructor(void *st);
90edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    static  void                freeBuffer(Parcel* parcel,
91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                           const uint8_t* data, size_t dataSize,
92edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                           const size_t* objects, size_t objectsSize,
93edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                           void* cookie);
94edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
95edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    const   sp<ProcessState>    mProcess;
96edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            Vector<BBinder*>    mPendingStrongDerefs;
97edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            Vector<RefBase::weakref_type*> mPendingWeakDerefs;
98edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
99edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            Parcel              mIn;
100edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            Parcel              mOut;
101edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            status_t            mLastError;
102edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            pid_t               mCallingPid;
103edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            uid_t               mCallingUid;
104edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
105edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
106edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android
107edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
108edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
109edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
110edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif // ANDROID_IPC_THREAD_STATE_H
111