mirror of
https://github.com/sunnypilot/sunnypilot.git
synced 2026-02-19 11:13:53 +08:00
bring over phonelibs minus frida-gum and qsml
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
/*
|
||||
* Copyright (C) 2013 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 ANDROID_APP_OPS_MANAGER_H
|
||||
#define ANDROID_APP_OPS_MANAGER_H
|
||||
|
||||
#include <binder/IAppOpsService.h>
|
||||
|
||||
#include <utils/threads.h>
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
namespace android {
|
||||
|
||||
class AppOpsManager
|
||||
{
|
||||
public:
|
||||
enum {
|
||||
MODE_ALLOWED = IAppOpsService::MODE_ALLOWED,
|
||||
MODE_IGNORED = IAppOpsService::MODE_IGNORED,
|
||||
MODE_ERRORED = IAppOpsService::MODE_ERRORED
|
||||
};
|
||||
|
||||
enum {
|
||||
OP_NONE = -1,
|
||||
OP_COARSE_LOCATION = 0,
|
||||
OP_FINE_LOCATION = 1,
|
||||
OP_GPS = 2,
|
||||
OP_VIBRATE = 3,
|
||||
OP_READ_CONTACTS = 4,
|
||||
OP_WRITE_CONTACTS = 5,
|
||||
OP_READ_CALL_LOG = 6,
|
||||
OP_WRITE_CALL_LOG = 7,
|
||||
OP_READ_CALENDAR = 8,
|
||||
OP_WRITE_CALENDAR = 9,
|
||||
OP_WIFI_SCAN = 10,
|
||||
OP_POST_NOTIFICATION = 11,
|
||||
OP_NEIGHBORING_CELLS = 12,
|
||||
OP_CALL_PHONE = 13,
|
||||
OP_READ_SMS = 14,
|
||||
OP_WRITE_SMS = 15,
|
||||
OP_RECEIVE_SMS = 16,
|
||||
OP_RECEIVE_EMERGECY_SMS = 17,
|
||||
OP_RECEIVE_MMS = 18,
|
||||
OP_RECEIVE_WAP_PUSH = 19,
|
||||
OP_SEND_SMS = 20,
|
||||
OP_READ_ICC_SMS = 21,
|
||||
OP_WRITE_ICC_SMS = 22,
|
||||
OP_WRITE_SETTINGS = 23,
|
||||
OP_SYSTEM_ALERT_WINDOW = 24,
|
||||
OP_ACCESS_NOTIFICATIONS = 25,
|
||||
OP_CAMERA = 26,
|
||||
OP_RECORD_AUDIO = 27,
|
||||
OP_PLAY_AUDIO = 28,
|
||||
OP_READ_CLIPBOARD = 29,
|
||||
OP_WRITE_CLIPBOARD = 30,
|
||||
OP_TAKE_MEDIA_BUTTONS = 31,
|
||||
OP_TAKE_AUDIO_FOCUS = 32,
|
||||
OP_AUDIO_MASTER_VOLUME = 33,
|
||||
OP_AUDIO_VOICE_VOLUME = 34,
|
||||
OP_AUDIO_RING_VOLUME = 35,
|
||||
OP_AUDIO_MEDIA_VOLUME = 36,
|
||||
OP_AUDIO_ALARM_VOLUME = 37,
|
||||
OP_AUDIO_NOTIFICATION_VOLUME = 38,
|
||||
OP_AUDIO_BLUETOOTH_VOLUME = 39,
|
||||
OP_WAKE_LOCK = 40,
|
||||
OP_MONITOR_LOCATION = 41,
|
||||
OP_MONITOR_HIGH_POWER_LOCATION = 42,
|
||||
OP_GET_USAGE_STATS = 43,
|
||||
OP_MUTE_MICROPHONE = 44,
|
||||
OP_TOAST_WINDOW = 45,
|
||||
OP_PROJECT_MEDIA = 46,
|
||||
OP_ACTIVATE_VPN = 47,
|
||||
OP_WRITE_WALLPAPER = 48,
|
||||
OP_ASSIST_STRUCTURE = 49,
|
||||
OP_ASSIST_SCREENSHOT = 50,
|
||||
OP_READ_PHONE_STATE = 51,
|
||||
OP_ADD_VOICEMAIL = 52,
|
||||
OP_USE_SIP = 53,
|
||||
OP_PROCESS_OUTGOING_CALLS = 54,
|
||||
OP_USE_FINGERPRINT = 55,
|
||||
OP_BODY_SENSORS = 56,
|
||||
OP_READ_CELL_BROADCASTS = 57,
|
||||
OP_MOCK_LOCATION = 58,
|
||||
OP_READ_EXTERNAL_STORAGE = 59,
|
||||
OP_WRITE_EXTERNAL_STORAGE = 60,
|
||||
OP_TURN_SCREEN_ON = 61,
|
||||
OP_GET_ACCOUNTS = 62,
|
||||
OP_WIFI_CHANGE = 63,
|
||||
OP_BLUETOOTH_CHANGE = 64,
|
||||
OP_BOOT_COMPLETED = 65,
|
||||
OP_NFC_CHANGE = 66,
|
||||
OP_DATA_CONNECT_CHANGE = 67,
|
||||
OP_SU = 68
|
||||
};
|
||||
|
||||
AppOpsManager();
|
||||
|
||||
int32_t checkOp(int32_t op, int32_t uid, const String16& callingPackage);
|
||||
int32_t noteOp(int32_t op, int32_t uid, const String16& callingPackage);
|
||||
int32_t startOp(int32_t op, int32_t uid, const String16& callingPackage);
|
||||
void finishOp(int32_t op, int32_t uid, const String16& callingPackage);
|
||||
void startWatchingMode(int32_t op, const String16& packageName,
|
||||
const sp<IAppOpsCallback>& callback);
|
||||
void stopWatchingMode(const sp<IAppOpsCallback>& callback);
|
||||
int32_t permissionToOpCode(const String16& permission);
|
||||
|
||||
private:
|
||||
Mutex mLock;
|
||||
sp<IAppOpsService> mService;
|
||||
|
||||
sp<IAppOpsService> getService();
|
||||
};
|
||||
|
||||
|
||||
}; // namespace android
|
||||
// ---------------------------------------------------------------------------
|
||||
#endif // ANDROID_APP_OPS_MANAGER_H
|
||||
105
phonelibs/android_frameworks_native/include/binder/Binder.h
Normal file
105
phonelibs/android_frameworks_native/include/binder/Binder.h
Normal file
@@ -0,0 +1,105 @@
|
||||
/*
|
||||
* Copyright (C) 2008 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 ANDROID_BINDER_H
|
||||
#define ANDROID_BINDER_H
|
||||
|
||||
#include <stdatomic.h>
|
||||
#include <stdint.h>
|
||||
#include <binder/IBinder.h>
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
namespace android {
|
||||
|
||||
class BBinder : public IBinder
|
||||
{
|
||||
public:
|
||||
BBinder();
|
||||
|
||||
virtual const String16& getInterfaceDescriptor() const;
|
||||
virtual bool isBinderAlive() const;
|
||||
virtual status_t pingBinder();
|
||||
virtual status_t dump(int fd, const Vector<String16>& args);
|
||||
|
||||
virtual status_t transact( uint32_t code,
|
||||
const Parcel& data,
|
||||
Parcel* reply,
|
||||
uint32_t flags = 0);
|
||||
|
||||
virtual status_t linkToDeath(const sp<DeathRecipient>& recipient,
|
||||
void* cookie = NULL,
|
||||
uint32_t flags = 0);
|
||||
|
||||
virtual status_t unlinkToDeath( const wp<DeathRecipient>& recipient,
|
||||
void* cookie = NULL,
|
||||
uint32_t flags = 0,
|
||||
wp<DeathRecipient>* outRecipient = NULL);
|
||||
|
||||
virtual void attachObject( const void* objectID,
|
||||
void* object,
|
||||
void* cleanupCookie,
|
||||
object_cleanup_func func);
|
||||
virtual void* findObject(const void* objectID) const;
|
||||
virtual void detachObject(const void* objectID);
|
||||
|
||||
virtual BBinder* localBinder();
|
||||
|
||||
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 Extras;
|
||||
|
||||
atomic_uintptr_t mExtras; // should be atomic<Extras *>
|
||||
void* mReserved0;
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
class BpRefBase : public virtual RefBase
|
||||
{
|
||||
protected:
|
||||
BpRefBase(const sp<IBinder>& o);
|
||||
virtual ~BpRefBase();
|
||||
virtual void onFirstRef();
|
||||
virtual void onLastStrongRef(const void* id);
|
||||
virtual bool onIncStrongAttempted(uint32_t flags, const void* id);
|
||||
|
||||
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 // ANDROID_BINDER_H
|
||||
@@ -0,0 +1,65 @@
|
||||
/*
|
||||
* Copyright (C) 2010 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 ANDROID_BINDER_SERVICE_H
|
||||
#define ANDROID_BINDER_SERVICE_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include <utils/Errors.h>
|
||||
#include <utils/String16.h>
|
||||
|
||||
#include <binder/IServiceManager.h>
|
||||
#include <binder/IPCThreadState.h>
|
||||
#include <binder/ProcessState.h>
|
||||
#include <binder/IServiceManager.h>
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
namespace android {
|
||||
|
||||
template<typename SERVICE>
|
||||
class BinderService
|
||||
{
|
||||
public:
|
||||
static status_t publish(bool allowIsolated = false) {
|
||||
sp<IServiceManager> sm(defaultServiceManager());
|
||||
return sm->addService(
|
||||
String16(SERVICE::getServiceName()),
|
||||
new SERVICE(), allowIsolated);
|
||||
}
|
||||
|
||||
static void publishAndJoinThreadPool(bool allowIsolated = false) {
|
||||
publish(allowIsolated);
|
||||
joinThreadPool();
|
||||
}
|
||||
|
||||
static void instantiate() { publish(); }
|
||||
|
||||
static status_t shutdown() { return NO_ERROR; }
|
||||
|
||||
private:
|
||||
static void joinThreadPool() {
|
||||
sp<ProcessState> ps(ProcessState::self());
|
||||
ps->startThreadPool();
|
||||
ps->giveThreadPoolName();
|
||||
IPCThreadState::self()->joinThreadPool();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}; // namespace android
|
||||
// ---------------------------------------------------------------------------
|
||||
#endif // ANDROID_BINDER_SERVICE_H
|
||||
124
phonelibs/android_frameworks_native/include/binder/BpBinder.h
Normal file
124
phonelibs/android_frameworks_native/include/binder/BpBinder.h
Normal file
@@ -0,0 +1,124 @@
|
||||
/*
|
||||
* Copyright (C) 2005 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 ANDROID_BPBINDER_H
|
||||
#define ANDROID_BPBINDER_H
|
||||
|
||||
#include <binder/IBinder.h>
|
||||
#include <utils/KeyedVector.h>
|
||||
#include <utils/threads.h>
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
namespace android {
|
||||
|
||||
class BpBinder : public IBinder
|
||||
{
|
||||
public:
|
||||
BpBinder(int32_t handle);
|
||||
|
||||
inline int32_t handle() const { return mHandle; }
|
||||
|
||||
virtual const String16& getInterfaceDescriptor() const;
|
||||
virtual bool isBinderAlive() const;
|
||||
virtual status_t pingBinder();
|
||||
virtual status_t dump(int fd, const Vector<String16>& args);
|
||||
|
||||
virtual status_t transact( uint32_t code,
|
||||
const Parcel& data,
|
||||
Parcel* reply,
|
||||
uint32_t flags = 0);
|
||||
|
||||
virtual status_t linkToDeath(const sp<DeathRecipient>& recipient,
|
||||
void* cookie = NULL,
|
||||
uint32_t flags = 0);
|
||||
virtual status_t unlinkToDeath( const wp<DeathRecipient>& recipient,
|
||||
void* cookie = NULL,
|
||||
uint32_t flags = 0,
|
||||
wp<DeathRecipient>* outRecipient = NULL);
|
||||
|
||||
virtual void attachObject( const void* objectID,
|
||||
void* object,
|
||||
void* cleanupCookie,
|
||||
object_cleanup_func func);
|
||||
virtual void* findObject(const void* objectID) const;
|
||||
virtual void detachObject(const void* objectID);
|
||||
|
||||
virtual BpBinder* remoteBinder();
|
||||
|
||||
status_t setConstantData(const void* data, size_t size);
|
||||
void sendObituary();
|
||||
|
||||
class ObjectManager
|
||||
{
|
||||
public:
|
||||
ObjectManager();
|
||||
~ObjectManager();
|
||||
|
||||
void attach( const void* objectID,
|
||||
void* object,
|
||||
void* cleanupCookie,
|
||||
IBinder::object_cleanup_func func);
|
||||
void* find(const void* objectID) const;
|
||||
void detach(const void* objectID);
|
||||
|
||||
void kill();
|
||||
|
||||
private:
|
||||
ObjectManager(const ObjectManager&);
|
||||
ObjectManager& operator=(const ObjectManager&);
|
||||
|
||||
struct entry_t
|
||||
{
|
||||
void* object;
|
||||
void* cleanupCookie;
|
||||
IBinder::object_cleanup_func func;
|
||||
};
|
||||
|
||||
KeyedVector<const void*, entry_t> mObjects;
|
||||
};
|
||||
|
||||
protected:
|
||||
virtual ~BpBinder();
|
||||
virtual void onFirstRef();
|
||||
virtual void onLastStrongRef(const void* id);
|
||||
virtual bool onIncStrongAttempted(uint32_t flags, const void* id);
|
||||
|
||||
private:
|
||||
const int32_t mHandle;
|
||||
|
||||
struct Obituary {
|
||||
wp<DeathRecipient> recipient;
|
||||
void* cookie;
|
||||
uint32_t flags;
|
||||
};
|
||||
|
||||
void reportOneDeath(const Obituary& obit);
|
||||
bool isDescriptorCached() const;
|
||||
|
||||
mutable Mutex mLock;
|
||||
volatile int32_t mAlive;
|
||||
volatile int32_t mObitsSent;
|
||||
Vector<Obituary>* mObituaries;
|
||||
ObjectManager mObjects;
|
||||
Parcel* mConstantData;
|
||||
mutable String16 mDescriptorCache;
|
||||
};
|
||||
|
||||
}; // namespace android
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
#endif // ANDROID_BPBINDER_H
|
||||
@@ -0,0 +1,67 @@
|
||||
/*
|
||||
* Copyright (C) 2006 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 ANDROID_BUFFEREDTEXTOUTPUT_H
|
||||
#define ANDROID_BUFFEREDTEXTOUTPUT_H
|
||||
|
||||
#include <binder/TextOutput.h>
|
||||
#include <utils/threads.h>
|
||||
#include <sys/uio.h>
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
namespace android {
|
||||
|
||||
class BufferedTextOutput : public TextOutput
|
||||
{
|
||||
public:
|
||||
//** Flags for constructor */
|
||||
enum {
|
||||
MULTITHREADED = 0x0001
|
||||
};
|
||||
|
||||
BufferedTextOutput(uint32_t flags = 0);
|
||||
virtual ~BufferedTextOutput();
|
||||
|
||||
virtual status_t print(const char* txt, size_t len);
|
||||
virtual void moveIndent(int delta);
|
||||
|
||||
virtual void pushBundle();
|
||||
virtual void popBundle();
|
||||
|
||||
protected:
|
||||
virtual status_t writeLines(const struct iovec& vec, size_t N) = 0;
|
||||
|
||||
private:
|
||||
struct BufferState;
|
||||
struct ThreadState;
|
||||
|
||||
static ThreadState*getThreadState();
|
||||
static void threadDestructor(void *st);
|
||||
|
||||
BufferState*getBuffer() const;
|
||||
|
||||
uint32_t mFlags;
|
||||
const int32_t mSeq;
|
||||
const int32_t mIndex;
|
||||
|
||||
Mutex mLock;
|
||||
BufferState* mGlobalState;
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
}; // namespace android
|
||||
|
||||
#endif // ANDROID_BUFFEREDTEXTOUTPUT_H
|
||||
49
phonelibs/android_frameworks_native/include/binder/Debug.h
Normal file
49
phonelibs/android_frameworks_native/include/binder/Debug.h
Normal file
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
* Copyright (C) 2005 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 ANDROID_BINDER_DEBUG_H
|
||||
#define ANDROID_BINDER_DEBUG_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
namespace android {
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
const char* stringForIndent(int32_t indentLevel);
|
||||
|
||||
typedef void (*debugPrintFunc)(void* cookie, const char* txt);
|
||||
|
||||
void printTypeCode(uint32_t typeCode,
|
||||
debugPrintFunc func = 0, void* cookie = 0);
|
||||
|
||||
void printHexData(int32_t indent, const void *buf, size_t length,
|
||||
size_t bytesPerLine=16, int32_t singleLineBytesCutoff=16,
|
||||
size_t alignment=0, bool cArrayStyle=false,
|
||||
debugPrintFunc func = 0, void* cookie = 0);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
}; // namespace android
|
||||
|
||||
#endif // ANDROID_BINDER_DEBUG_H
|
||||
@@ -0,0 +1,55 @@
|
||||
/*
|
||||
* Copyright (C) 2013 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 ANDROID_IAPP_OPS_CALLBACK_H
|
||||
#define ANDROID_IAPP_OPS_CALLBACK_H
|
||||
|
||||
#include <binder/IInterface.h>
|
||||
|
||||
namespace android {
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
class IAppOpsCallback : public IInterface
|
||||
{
|
||||
public:
|
||||
DECLARE_META_INTERFACE(AppOpsCallback);
|
||||
|
||||
virtual void opChanged(int32_t op, const String16& packageName) = 0;
|
||||
|
||||
enum {
|
||||
OP_CHANGED_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION
|
||||
};
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
class BnAppOpsCallback : public BnInterface<IAppOpsCallback>
|
||||
{
|
||||
public:
|
||||
virtual status_t onTransact( uint32_t code,
|
||||
const Parcel& data,
|
||||
Parcel* reply,
|
||||
uint32_t flags = 0);
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
}; // namespace android
|
||||
|
||||
#endif // ANDROID_IAPP_OPS_CALLBACK_H
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
/*
|
||||
* Copyright (C) 2013 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 ANDROID_IAPP_OPS_SERVICE_H
|
||||
#define ANDROID_IAPP_OPS_SERVICE_H
|
||||
|
||||
#include <binder/IAppOpsCallback.h>
|
||||
#include <binder/IInterface.h>
|
||||
|
||||
namespace android {
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
class IAppOpsService : public IInterface
|
||||
{
|
||||
public:
|
||||
DECLARE_META_INTERFACE(AppOpsService);
|
||||
|
||||
virtual int32_t checkOperation(int32_t code, int32_t uid, const String16& packageName) = 0;
|
||||
virtual int32_t noteOperation(int32_t code, int32_t uid, const String16& packageName) = 0;
|
||||
virtual int32_t startOperation(const sp<IBinder>& token, int32_t code, int32_t uid,
|
||||
const String16& packageName) = 0;
|
||||
virtual void finishOperation(const sp<IBinder>& token, int32_t code, int32_t uid,
|
||||
const String16& packageName) = 0;
|
||||
virtual void startWatchingMode(int32_t op, const String16& packageName,
|
||||
const sp<IAppOpsCallback>& callback) = 0;
|
||||
virtual void stopWatchingMode(const sp<IAppOpsCallback>& callback) = 0;
|
||||
virtual sp<IBinder> getToken(const sp<IBinder>& clientToken) = 0;
|
||||
virtual int32_t permissionToOpCode(const String16& permission) = 0;
|
||||
|
||||
enum {
|
||||
CHECK_OPERATION_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION,
|
||||
NOTE_OPERATION_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION+1,
|
||||
START_OPERATION_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION+2,
|
||||
FINISH_OPERATION_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION+3,
|
||||
START_WATCHING_MODE_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION+4,
|
||||
STOP_WATCHING_MODE_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION+5,
|
||||
GET_TOKEN_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION+6,
|
||||
PERMISSION_TO_OP_CODE_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION+7,
|
||||
};
|
||||
|
||||
enum {
|
||||
MODE_ALLOWED = 0,
|
||||
MODE_IGNORED = 1,
|
||||
MODE_ERRORED = 2
|
||||
};
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
class BnAppOpsService : public BnInterface<IAppOpsService>
|
||||
{
|
||||
public:
|
||||
virtual status_t onTransact( uint32_t code,
|
||||
const Parcel& data,
|
||||
Parcel* reply,
|
||||
uint32_t flags = 0);
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
}; // namespace android
|
||||
|
||||
#endif // ANDROID_IAPP_OPS_SERVICE_H
|
||||
@@ -0,0 +1,79 @@
|
||||
/*
|
||||
* Copyright (C) 2013 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 ANDROID_IBATTERYSTATS_H
|
||||
#define ANDROID_IBATTERYSTATS_H
|
||||
|
||||
#include <binder/IInterface.h>
|
||||
|
||||
namespace android {
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
class IBatteryStats : public IInterface
|
||||
{
|
||||
public:
|
||||
DECLARE_META_INTERFACE(BatteryStats);
|
||||
|
||||
virtual void noteStartSensor(int uid, int sensor) = 0;
|
||||
virtual void noteStopSensor(int uid, int sensor) = 0;
|
||||
virtual void noteStartVideo(int uid) = 0;
|
||||
virtual void noteStopVideo(int uid) = 0;
|
||||
virtual void noteStartAudio(int uid) = 0;
|
||||
virtual void noteStopAudio(int uid) = 0;
|
||||
virtual void noteResetVideo() = 0;
|
||||
virtual void noteResetAudio() = 0;
|
||||
virtual void noteFlashlightOn(int uid) = 0;
|
||||
virtual void noteFlashlightOff(int uid) = 0;
|
||||
virtual void noteStartCamera(int uid) = 0;
|
||||
virtual void noteStopCamera(int uid) = 0;
|
||||
virtual void noteResetCamera() = 0;
|
||||
virtual void noteResetFlashlight() = 0;
|
||||
|
||||
enum {
|
||||
NOTE_START_SENSOR_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION,
|
||||
NOTE_STOP_SENSOR_TRANSACTION,
|
||||
NOTE_START_VIDEO_TRANSACTION,
|
||||
NOTE_STOP_VIDEO_TRANSACTION,
|
||||
NOTE_START_AUDIO_TRANSACTION,
|
||||
NOTE_STOP_AUDIO_TRANSACTION,
|
||||
NOTE_RESET_VIDEO_TRANSACTION,
|
||||
NOTE_RESET_AUDIO_TRANSACTION,
|
||||
NOTE_FLASHLIGHT_ON_TRANSACTION,
|
||||
NOTE_FLASHLIGHT_OFF_TRANSACTION,
|
||||
NOTE_START_CAMERA_TRANSACTION,
|
||||
NOTE_STOP_CAMERA_TRANSACTION,
|
||||
NOTE_RESET_CAMERA_TRANSACTION,
|
||||
NOTE_RESET_FLASHLIGHT_TRANSACTION
|
||||
};
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
class BnBatteryStats : public BnInterface<IBatteryStats>
|
||||
{
|
||||
public:
|
||||
virtual status_t onTransact( uint32_t code,
|
||||
const Parcel& data,
|
||||
Parcel* reply,
|
||||
uint32_t flags = 0);
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
}; // namespace android
|
||||
|
||||
#endif // ANDROID_IBATTERYSTATS_H
|
||||
152
phonelibs/android_frameworks_native/include/binder/IBinder.h
Normal file
152
phonelibs/android_frameworks_native/include/binder/IBinder.h
Normal file
@@ -0,0 +1,152 @@
|
||||
/*
|
||||
* Copyright (C) 2008 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 ANDROID_IBINDER_H
|
||||
#define ANDROID_IBINDER_H
|
||||
|
||||
#include <utils/Errors.h>
|
||||
#include <utils/RefBase.h>
|
||||
#include <utils/String16.h>
|
||||
#include <utils/Vector.h>
|
||||
|
||||
|
||||
#define B_PACK_CHARS(c1, c2, c3, c4) \
|
||||
((((c1)<<24)) | (((c2)<<16)) | (((c3)<<8)) | (c4))
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
namespace android {
|
||||
|
||||
class BBinder;
|
||||
class BpBinder;
|
||||
class IInterface;
|
||||
class Parcel;
|
||||
|
||||
/**
|
||||
* Base class and low-level protocol for a remotable object.
|
||||
* You can derive from this class to create an object for which other
|
||||
* processes can hold references to it. Communication between processes
|
||||
* (method calls, property get and set) is down through a low-level
|
||||
* protocol implemented on top of the transact() API.
|
||||
*/
|
||||
class IBinder : public virtual RefBase
|
||||
{
|
||||
public:
|
||||
enum {
|
||||
FIRST_CALL_TRANSACTION = 0x00000001,
|
||||
LAST_CALL_TRANSACTION = 0x00ffffff,
|
||||
|
||||
PING_TRANSACTION = B_PACK_CHARS('_','P','N','G'),
|
||||
DUMP_TRANSACTION = B_PACK_CHARS('_','D','M','P'),
|
||||
INTERFACE_TRANSACTION = B_PACK_CHARS('_', 'N', 'T', 'F'),
|
||||
SYSPROPS_TRANSACTION = B_PACK_CHARS('_', 'S', 'P', 'R'),
|
||||
|
||||
// Corresponds to TF_ONE_WAY -- an asynchronous call.
|
||||
FLAG_ONEWAY = 0x00000001
|
||||
};
|
||||
|
||||
IBinder();
|
||||
|
||||
/**
|
||||
* Check if this IBinder implements the interface named by
|
||||
* @a descriptor. If it does, the base pointer to it is returned,
|
||||
* which you can safely static_cast<> to the concrete C++ interface.
|
||||
*/
|
||||
virtual sp<IInterface> queryLocalInterface(const String16& descriptor);
|
||||
|
||||
/**
|
||||
* Return the canonical name of the interface provided by this IBinder
|
||||
* object.
|
||||
*/
|
||||
virtual const String16& getInterfaceDescriptor() const = 0;
|
||||
|
||||
virtual bool isBinderAlive() const = 0;
|
||||
virtual status_t pingBinder() = 0;
|
||||
virtual status_t dump(int fd, const Vector<String16>& args) = 0;
|
||||
|
||||
virtual status_t transact( uint32_t code,
|
||||
const Parcel& data,
|
||||
Parcel* reply,
|
||||
uint32_t flags = 0) = 0;
|
||||
|
||||
class DeathRecipient : public virtual RefBase
|
||||
{
|
||||
public:
|
||||
virtual void binderDied(const wp<IBinder>& who) = 0;
|
||||
};
|
||||
|
||||
/**
|
||||
* Register the @a recipient for a notification if this binder
|
||||
* goes away. If this binder object unexpectedly goes away
|
||||
* (typically because its hosting process has been killed),
|
||||
* then DeathRecipient::binderDied() will be called with a reference
|
||||
* to this.
|
||||
*
|
||||
* The @a cookie is optional -- if non-NULL, it should be a
|
||||
* memory address that you own (that is, you know it is unique).
|
||||
*
|
||||
* @note You will only receive death notifications for remote binders,
|
||||
* as local binders by definition can't die without you dying as well.
|
||||
* Trying to use this function on a local binder will result in an
|
||||
* INVALID_OPERATION code being returned and nothing happening.
|
||||
*
|
||||
* @note This link always holds a weak reference to its recipient.
|
||||
*
|
||||
* @note You will only receive a weak reference to the dead
|
||||
* binder. You should not try to promote this to a strong reference.
|
||||
* (Nor should you need to, as there is nothing useful you can
|
||||
* directly do with it now that it has passed on.)
|
||||
*/
|
||||
virtual status_t linkToDeath(const sp<DeathRecipient>& recipient,
|
||||
void* cookie = NULL,
|
||||
uint32_t flags = 0) = 0;
|
||||
|
||||
/**
|
||||
* Remove a previously registered death notification.
|
||||
* The @a recipient will no longer be called if this object
|
||||
* dies. The @a cookie is optional. If non-NULL, you can
|
||||
* supply a NULL @a recipient, and the recipient previously
|
||||
* added with that cookie will be unlinked.
|
||||
*/
|
||||
virtual status_t unlinkToDeath( const wp<DeathRecipient>& recipient,
|
||||
void* cookie = NULL,
|
||||
uint32_t flags = 0,
|
||||
wp<DeathRecipient>* outRecipient = NULL) = 0;
|
||||
|
||||
virtual bool checkSubclass(const void* subclassID) const;
|
||||
|
||||
typedef void (*object_cleanup_func)(const void* id, void* obj, void* cleanupCookie);
|
||||
|
||||
virtual void attachObject( const void* objectID,
|
||||
void* object,
|
||||
void* cleanupCookie,
|
||||
object_cleanup_func func) = 0;
|
||||
virtual void* findObject(const void* objectID) const = 0;
|
||||
virtual void detachObject(const void* objectID) = 0;
|
||||
|
||||
virtual BBinder* localBinder();
|
||||
virtual BpBinder* remoteBinder();
|
||||
|
||||
protected:
|
||||
virtual ~IBinder();
|
||||
|
||||
private:
|
||||
};
|
||||
|
||||
}; // namespace android
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
#endif // ANDROID_IBINDER_H
|
||||
150
phonelibs/android_frameworks_native/include/binder/IInterface.h
Normal file
150
phonelibs/android_frameworks_native/include/binder/IInterface.h
Normal file
@@ -0,0 +1,150 @@
|
||||
/*
|
||||
* Copyright (C) 2005 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 ANDROID_IINTERFACE_H
|
||||
#define ANDROID_IINTERFACE_H
|
||||
|
||||
#include <binder/Binder.h>
|
||||
|
||||
namespace android {
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
class IInterface : public virtual RefBase
|
||||
{
|
||||
public:
|
||||
IInterface();
|
||||
static sp<IBinder> asBinder(const IInterface*);
|
||||
static sp<IBinder> asBinder(const sp<IInterface>&);
|
||||
|
||||
protected:
|
||||
virtual ~IInterface();
|
||||
virtual IBinder* onAsBinder() = 0;
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
template<typename INTERFACE>
|
||||
inline sp<INTERFACE> interface_cast(const sp<IBinder>& obj)
|
||||
{
|
||||
return INTERFACE::asInterface(obj);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
template<typename INTERFACE>
|
||||
class BnInterface : public INTERFACE, public BBinder
|
||||
{
|
||||
public:
|
||||
virtual sp<IInterface> queryLocalInterface(const String16& _descriptor);
|
||||
virtual const String16& getInterfaceDescriptor() const;
|
||||
|
||||
protected:
|
||||
virtual IBinder* onAsBinder();
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
template<typename INTERFACE>
|
||||
class BpInterface : public INTERFACE, public BpRefBase
|
||||
{
|
||||
public:
|
||||
BpInterface(const sp<IBinder>& remote);
|
||||
|
||||
protected:
|
||||
virtual IBinder* onAsBinder();
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
#define DECLARE_META_INTERFACE(INTERFACE) \
|
||||
static const android::String16 descriptor; \
|
||||
static android::sp<I##INTERFACE> asInterface( \
|
||||
const android::sp<android::IBinder>& obj); \
|
||||
virtual const android::String16& getInterfaceDescriptor() const; \
|
||||
I##INTERFACE(); \
|
||||
virtual ~I##INTERFACE(); \
|
||||
|
||||
|
||||
#define IMPLEMENT_META_INTERFACE(INTERFACE, NAME) \
|
||||
const android::String16 I##INTERFACE::descriptor(NAME); \
|
||||
const android::String16& \
|
||||
I##INTERFACE::getInterfaceDescriptor() const { \
|
||||
return I##INTERFACE::descriptor; \
|
||||
} \
|
||||
android::sp<I##INTERFACE> I##INTERFACE::asInterface( \
|
||||
const android::sp<android::IBinder>& obj) \
|
||||
{ \
|
||||
android::sp<I##INTERFACE> intr; \
|
||||
if (obj != NULL) { \
|
||||
intr = static_cast<I##INTERFACE*>( \
|
||||
obj->queryLocalInterface( \
|
||||
I##INTERFACE::descriptor).get()); \
|
||||
if (intr == NULL) { \
|
||||
intr = new Bp##INTERFACE(obj); \
|
||||
} \
|
||||
} \
|
||||
return intr; \
|
||||
} \
|
||||
I##INTERFACE::I##INTERFACE() { } \
|
||||
I##INTERFACE::~I##INTERFACE() { } \
|
||||
|
||||
|
||||
#define CHECK_INTERFACE(interface, data, reply) \
|
||||
if (!data.checkInterface(this)) { return PERMISSION_DENIED; } \
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// No user-serviceable parts after this...
|
||||
|
||||
template<typename INTERFACE>
|
||||
inline sp<IInterface> BnInterface<INTERFACE>::queryLocalInterface(
|
||||
const String16& _descriptor)
|
||||
{
|
||||
if (_descriptor == INTERFACE::descriptor) return this;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
template<typename INTERFACE>
|
||||
inline const String16& BnInterface<INTERFACE>::getInterfaceDescriptor() const
|
||||
{
|
||||
return INTERFACE::getInterfaceDescriptor();
|
||||
}
|
||||
|
||||
template<typename INTERFACE>
|
||||
IBinder* BnInterface<INTERFACE>::onAsBinder()
|
||||
{
|
||||
return this;
|
||||
}
|
||||
|
||||
template<typename INTERFACE>
|
||||
inline BpInterface<INTERFACE>::BpInterface(const sp<IBinder>& remote)
|
||||
: BpRefBase(remote)
|
||||
{
|
||||
}
|
||||
|
||||
template<typename INTERFACE>
|
||||
inline IBinder* BpInterface<INTERFACE>::onAsBinder()
|
||||
{
|
||||
return remote();
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
}; // namespace android
|
||||
|
||||
#endif // ANDROID_IINTERFACE_H
|
||||
107
phonelibs/android_frameworks_native/include/binder/IMemory.h
Normal file
107
phonelibs/android_frameworks_native/include/binder/IMemory.h
Normal file
@@ -0,0 +1,107 @@
|
||||
/*
|
||||
* Copyright (C) 2007 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 ANDROID_IMEMORY_H
|
||||
#define ANDROID_IMEMORY_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/mman.h>
|
||||
|
||||
#include <utils/RefBase.h>
|
||||
#include <utils/Errors.h>
|
||||
#include <binder/IInterface.h>
|
||||
|
||||
namespace android {
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
class IMemoryHeap : public IInterface
|
||||
{
|
||||
public:
|
||||
DECLARE_META_INTERFACE(MemoryHeap);
|
||||
|
||||
// flags returned by getFlags()
|
||||
enum {
|
||||
READ_ONLY = 0x00000001,
|
||||
#ifdef USE_MEMORY_HEAP_ION
|
||||
USE_ION_FD = 0x00008000
|
||||
#else
|
||||
USE_ION_FD = 0x00000008
|
||||
#endif
|
||||
};
|
||||
|
||||
virtual int getHeapID() const = 0;
|
||||
virtual void* getBase() const = 0;
|
||||
virtual size_t getSize() const = 0;
|
||||
virtual uint32_t getFlags() const = 0;
|
||||
virtual uint32_t getOffset() const = 0;
|
||||
|
||||
// these are there just for backward source compatibility
|
||||
int32_t heapID() const { return getHeapID(); }
|
||||
void* base() const { return getBase(); }
|
||||
size_t virtualSize() const { return getSize(); }
|
||||
};
|
||||
|
||||
class BnMemoryHeap : public BnInterface<IMemoryHeap>
|
||||
{
|
||||
public:
|
||||
virtual status_t onTransact(
|
||||
uint32_t code,
|
||||
const Parcel& data,
|
||||
Parcel* reply,
|
||||
uint32_t flags = 0);
|
||||
|
||||
BnMemoryHeap();
|
||||
protected:
|
||||
virtual ~BnMemoryHeap();
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
class IMemory : public IInterface
|
||||
{
|
||||
public:
|
||||
DECLARE_META_INTERFACE(Memory);
|
||||
|
||||
virtual sp<IMemoryHeap> getMemory(ssize_t* offset=0, size_t* size=0) const = 0;
|
||||
|
||||
// helpers
|
||||
void* fastPointer(const sp<IBinder>& heap, ssize_t offset) const;
|
||||
void* pointer() const;
|
||||
size_t size() const;
|
||||
ssize_t offset() const;
|
||||
};
|
||||
|
||||
class BnMemory : public BnInterface<IMemory>
|
||||
{
|
||||
public:
|
||||
virtual status_t onTransact(
|
||||
uint32_t code,
|
||||
const Parcel& data,
|
||||
Parcel* reply,
|
||||
uint32_t flags = 0);
|
||||
|
||||
BnMemory();
|
||||
protected:
|
||||
virtual ~BnMemory();
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
}; // namespace android
|
||||
|
||||
#endif // ANDROID_IMEMORY_H
|
||||
@@ -0,0 +1,135 @@
|
||||
/*
|
||||
* Copyright (C) 2005 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 ANDROID_IPC_THREAD_STATE_H
|
||||
#define ANDROID_IPC_THREAD_STATE_H
|
||||
|
||||
#include <utils/Errors.h>
|
||||
#include <binder/Parcel.h>
|
||||
#include <binder/ProcessState.h>
|
||||
#include <utils/Vector.h>
|
||||
|
||||
#if defined(_WIN32)
|
||||
typedef int uid_t;
|
||||
#endif
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
namespace android {
|
||||
|
||||
class IPCThreadState
|
||||
{
|
||||
public:
|
||||
static IPCThreadState* self();
|
||||
static IPCThreadState* selfOrNull(); // self(), but won't instantiate
|
||||
|
||||
sp<ProcessState> process();
|
||||
|
||||
status_t clearLastError();
|
||||
|
||||
pid_t getCallingPid() const;
|
||||
uid_t getCallingUid() const;
|
||||
|
||||
void setStrictModePolicy(int32_t policy);
|
||||
int32_t getStrictModePolicy() const;
|
||||
|
||||
void setLastTransactionBinderFlags(int32_t flags);
|
||||
int32_t getLastTransactionBinderFlags() const;
|
||||
|
||||
int64_t clearCallingIdentity();
|
||||
void restoreCallingIdentity(int64_t token);
|
||||
|
||||
int setupPolling(int* fd);
|
||||
status_t handlePolledCommands();
|
||||
void flushCommands();
|
||||
|
||||
void joinThreadPool(bool isMain = true);
|
||||
|
||||
// Stop the local process.
|
||||
void stopProcess(bool immediate = true);
|
||||
|
||||
status_t transact(int32_t handle,
|
||||
uint32_t code, const Parcel& data,
|
||||
Parcel* reply, uint32_t flags);
|
||||
|
||||
void incStrongHandle(int32_t handle);
|
||||
void decStrongHandle(int32_t handle);
|
||||
void incWeakHandle(int32_t handle);
|
||||
void decWeakHandle(int32_t handle);
|
||||
status_t attemptIncStrongHandle(int32_t handle);
|
||||
static void expungeHandle(int32_t handle, IBinder* binder);
|
||||
status_t requestDeathNotification( int32_t handle,
|
||||
BpBinder* proxy);
|
||||
status_t clearDeathNotification( int32_t handle,
|
||||
BpBinder* proxy);
|
||||
|
||||
static void shutdown();
|
||||
|
||||
// Call this to disable switching threads to background scheduling when
|
||||
// receiving incoming IPC calls. This is specifically here for the
|
||||
// Android system process, since it expects to have background apps calling
|
||||
// in to it but doesn't want to acquire locks in its services while in
|
||||
// the background.
|
||||
static void disableBackgroundScheduling(bool disable);
|
||||
|
||||
// Call blocks until the number of executing binder threads is less than
|
||||
// the maximum number of binder threads threads allowed for this process.
|
||||
void blockUntilThreadAvailable();
|
||||
|
||||
private:
|
||||
IPCThreadState();
|
||||
~IPCThreadState();
|
||||
|
||||
status_t sendReply(const Parcel& reply, uint32_t flags);
|
||||
status_t waitForResponse(Parcel *reply,
|
||||
status_t *acquireResult=NULL);
|
||||
status_t talkWithDriver(bool doReceive=true);
|
||||
status_t writeTransactionData(int32_t cmd,
|
||||
uint32_t binderFlags,
|
||||
int32_t handle,
|
||||
uint32_t code,
|
||||
const Parcel& data,
|
||||
status_t* statusBuffer);
|
||||
status_t getAndExecuteCommand();
|
||||
status_t executeCommand(int32_t command);
|
||||
void processPendingDerefs();
|
||||
|
||||
void clearCaller();
|
||||
|
||||
static void threadDestructor(void *st);
|
||||
static void freeBuffer(Parcel* parcel,
|
||||
const uint8_t* data, size_t dataSize,
|
||||
const binder_size_t* objects, size_t objectsSize,
|
||||
void* cookie);
|
||||
|
||||
const sp<ProcessState> mProcess;
|
||||
const pid_t mMyThreadId;
|
||||
Vector<BBinder*> mPendingStrongDerefs;
|
||||
Vector<RefBase::weakref_type*> mPendingWeakDerefs;
|
||||
|
||||
Parcel mIn;
|
||||
Parcel mOut;
|
||||
status_t mLastError;
|
||||
pid_t mCallingPid;
|
||||
uid_t mCallingUid;
|
||||
int32_t mStrictModePolicy;
|
||||
int32_t mLastTransactionBinderFlags;
|
||||
};
|
||||
|
||||
}; // namespace android
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
#endif // ANDROID_IPC_THREAD_STATE_H
|
||||
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
* Copyright (C) 2005 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 ANDROID_IPERMISSION_CONTROLLER_H
|
||||
#define ANDROID_IPERMISSION_CONTROLLER_H
|
||||
|
||||
#include <binder/IInterface.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
namespace android {
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
class IPermissionController : public IInterface
|
||||
{
|
||||
public:
|
||||
DECLARE_META_INTERFACE(PermissionController);
|
||||
|
||||
virtual bool checkPermission(const String16& permission, int32_t pid, int32_t uid) = 0;
|
||||
|
||||
virtual void getPackagesForUid(const uid_t uid, Vector<String16> &packages) = 0;
|
||||
|
||||
virtual bool isRuntimePermission(const String16& permission) = 0;
|
||||
|
||||
enum {
|
||||
CHECK_PERMISSION_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION,
|
||||
GET_PACKAGES_FOR_UID_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION + 1,
|
||||
IS_RUNTIME_PERMISSION_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION + 2
|
||||
};
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
class BnPermissionController : public BnInterface<IPermissionController>
|
||||
{
|
||||
public:
|
||||
virtual status_t onTransact( uint32_t code,
|
||||
const Parcel& data,
|
||||
Parcel* reply,
|
||||
uint32_t flags = 0);
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
}; // namespace android
|
||||
|
||||
#endif // ANDROID_IPERMISSION_CONTROLLER_H
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
* Copyright 2015 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 ANDROID_I_PROCESS_INFO_SERVICE_H
|
||||
#define ANDROID_I_PROCESS_INFO_SERVICE_H
|
||||
|
||||
#include <binder/IInterface.h>
|
||||
|
||||
namespace android {
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
class IProcessInfoService : public IInterface {
|
||||
public:
|
||||
DECLARE_META_INTERFACE(ProcessInfoService);
|
||||
|
||||
virtual status_t getProcessStatesFromPids( size_t length,
|
||||
/*in*/ int32_t* pids,
|
||||
/*out*/ int32_t* states) = 0;
|
||||
|
||||
enum {
|
||||
GET_PROCESS_STATES_FROM_PIDS = IBinder::FIRST_CALL_TRANSACTION,
|
||||
};
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
class BnProcessInfoService : public BnInterface<IProcessInfoService> {
|
||||
public:
|
||||
virtual status_t onTransact( uint32_t code,
|
||||
const Parcel& data,
|
||||
Parcel* reply,
|
||||
uint32_t flags = 0);
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
}; // namespace android
|
||||
|
||||
#endif // ANDROID_I_PROCESS_INFO_SERVICE_H
|
||||
@@ -0,0 +1,101 @@
|
||||
/*
|
||||
* Copyright (C) 2005 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 ANDROID_ISERVICE_MANAGER_H
|
||||
#define ANDROID_ISERVICE_MANAGER_H
|
||||
|
||||
#include <binder/IInterface.h>
|
||||
#include <binder/IPermissionController.h>
|
||||
#include <utils/Vector.h>
|
||||
#include <utils/String16.h>
|
||||
|
||||
namespace android {
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
class IServiceManager : public IInterface
|
||||
{
|
||||
public:
|
||||
DECLARE_META_INTERFACE(ServiceManager);
|
||||
|
||||
/**
|
||||
* Retrieve an existing service, blocking for a few seconds
|
||||
* if it doesn't yet exist.
|
||||
*/
|
||||
virtual sp<IBinder> getService( const String16& name) const = 0;
|
||||
|
||||
/**
|
||||
* Retrieve an existing service, non-blocking.
|
||||
*/
|
||||
virtual sp<IBinder> checkService( const String16& name) const = 0;
|
||||
|
||||
/**
|
||||
* Register a service.
|
||||
*/
|
||||
virtual status_t addService( const String16& name,
|
||||
const sp<IBinder>& service,
|
||||
bool allowIsolated = false) = 0;
|
||||
|
||||
/**
|
||||
* Return list of all existing services.
|
||||
*/
|
||||
virtual Vector<String16> listServices() = 0;
|
||||
|
||||
enum {
|
||||
GET_SERVICE_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION,
|
||||
CHECK_SERVICE_TRANSACTION,
|
||||
ADD_SERVICE_TRANSACTION,
|
||||
LIST_SERVICES_TRANSACTION,
|
||||
};
|
||||
};
|
||||
|
||||
sp<IServiceManager> defaultServiceManager();
|
||||
|
||||
template<typename INTERFACE>
|
||||
status_t getService(const String16& name, sp<INTERFACE>* outService)
|
||||
{
|
||||
const sp<IServiceManager> sm = defaultServiceManager();
|
||||
if (sm != NULL) {
|
||||
*outService = interface_cast<INTERFACE>(sm->getService(name));
|
||||
if ((*outService) != NULL) return NO_ERROR;
|
||||
}
|
||||
return NAME_NOT_FOUND;
|
||||
}
|
||||
|
||||
bool checkCallingPermission(const String16& permission);
|
||||
bool checkCallingPermission(const String16& permission,
|
||||
int32_t* outPid, int32_t* outUid);
|
||||
bool checkPermission(const String16& permission, pid_t pid, uid_t uid);
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
class BnServiceManager : public BnInterface<IServiceManager>
|
||||
{
|
||||
public:
|
||||
virtual status_t onTransact( uint32_t code,
|
||||
const Parcel& data,
|
||||
Parcel* reply,
|
||||
uint32_t flags = 0);
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
}; // namespace android
|
||||
|
||||
#endif // ANDROID_ISERVICE_MANAGER_H
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
* Copyright (C) 2008 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 ANDROID_MEMORY_BASE_H
|
||||
#define ANDROID_MEMORY_BASE_H
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include <binder/IMemory.h>
|
||||
|
||||
|
||||
namespace android {
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
class MemoryBase : public BnMemory
|
||||
{
|
||||
public:
|
||||
MemoryBase(const sp<IMemoryHeap>& heap, ssize_t offset, size_t size);
|
||||
virtual ~MemoryBase();
|
||||
virtual sp<IMemoryHeap> getMemory(ssize_t* offset, size_t* size) const;
|
||||
|
||||
protected:
|
||||
size_t getSize() const { return mSize; }
|
||||
ssize_t getOffset() const { return mOffset; }
|
||||
const sp<IMemoryHeap>& getHeap() const { return mHeap; }
|
||||
|
||||
private:
|
||||
size_t mSize;
|
||||
ssize_t mOffset;
|
||||
sp<IMemoryHeap> mHeap;
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
}; // namespace android
|
||||
|
||||
#endif // ANDROID_MEMORY_BASE_H
|
||||
@@ -0,0 +1,61 @@
|
||||
/*
|
||||
* Copyright (C) 2007 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 ANDROID_MEMORY_DEALER_H
|
||||
#define ANDROID_MEMORY_DEALER_H
|
||||
|
||||
|
||||
#include <stdint.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#include <binder/IMemory.h>
|
||||
#include <binder/MemoryHeapBase.h>
|
||||
|
||||
namespace android {
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
class SimpleBestFitAllocator;
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
class MemoryDealer : public RefBase
|
||||
{
|
||||
public:
|
||||
MemoryDealer(size_t size, const char* name = 0,
|
||||
uint32_t flags = 0 /* or bits such as MemoryHeapBase::READ_ONLY */ );
|
||||
|
||||
virtual sp<IMemory> allocate(size_t size);
|
||||
virtual void deallocate(size_t offset);
|
||||
virtual void dump(const char* what) const;
|
||||
|
||||
sp<IMemoryHeap> getMemoryHeap() const { return heap(); }
|
||||
|
||||
protected:
|
||||
virtual ~MemoryDealer();
|
||||
|
||||
private:
|
||||
const sp<IMemoryHeap>& heap() const;
|
||||
SimpleBestFitAllocator* allocator() const;
|
||||
|
||||
sp<IMemoryHeap> mHeap;
|
||||
SimpleBestFitAllocator* mAllocator;
|
||||
};
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
}; // namespace android
|
||||
|
||||
#endif // ANDROID_MEMORY_DEALER_H
|
||||
@@ -0,0 +1,103 @@
|
||||
/*
|
||||
* Copyright (C) 2008 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 ANDROID_MEMORY_HEAP_BASE_H
|
||||
#define ANDROID_MEMORY_HEAP_BASE_H
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include <binder/IMemory.h>
|
||||
|
||||
|
||||
namespace android {
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
class MemoryHeapBase : public virtual BnMemoryHeap
|
||||
{
|
||||
public:
|
||||
enum {
|
||||
READ_ONLY = IMemoryHeap::READ_ONLY,
|
||||
// memory won't be mapped locally, but will be mapped in the remote
|
||||
// process.
|
||||
DONT_MAP_LOCALLY = 0x00000100,
|
||||
NO_CACHING = 0x00000200
|
||||
};
|
||||
|
||||
/*
|
||||
* maps the memory referenced by fd. but DOESN'T take ownership
|
||||
* of the filedescriptor (it makes a copy with dup()
|
||||
*/
|
||||
MemoryHeapBase(int fd, size_t size, uint32_t flags = 0, uint32_t offset = 0);
|
||||
|
||||
/*
|
||||
* maps memory from the given device
|
||||
*/
|
||||
MemoryHeapBase(const char* device, size_t size = 0, uint32_t flags = 0);
|
||||
|
||||
/*
|
||||
* maps memory from ashmem, with the given name for debugging
|
||||
*/
|
||||
MemoryHeapBase(size_t size, uint32_t flags = 0, char const* name = NULL);
|
||||
|
||||
virtual ~MemoryHeapBase();
|
||||
|
||||
/* implement IMemoryHeap interface */
|
||||
virtual int getHeapID() const;
|
||||
|
||||
/* virtual address of the heap. returns MAP_FAILED in case of error */
|
||||
virtual void* getBase() const;
|
||||
|
||||
virtual size_t getSize() const;
|
||||
virtual uint32_t getFlags() const;
|
||||
virtual uint32_t getOffset() const;
|
||||
|
||||
const char* getDevice() const;
|
||||
|
||||
/* this closes this heap -- use carefully */
|
||||
void dispose();
|
||||
|
||||
/* this is only needed as a workaround, use only if you know
|
||||
* what you are doing */
|
||||
status_t setDevice(const char* device) {
|
||||
if (mDevice == 0)
|
||||
mDevice = device;
|
||||
return mDevice ? NO_ERROR : ALREADY_EXISTS;
|
||||
}
|
||||
|
||||
protected:
|
||||
MemoryHeapBase();
|
||||
// init() takes ownership of fd
|
||||
status_t init(int fd, void *base, int size,
|
||||
int flags = 0, const char* device = NULL);
|
||||
|
||||
private:
|
||||
status_t mapfd(int fd, size_t size, uint32_t offset = 0);
|
||||
|
||||
int mFD;
|
||||
size_t mSize;
|
||||
void* mBase;
|
||||
uint32_t mFlags;
|
||||
const char* mDevice;
|
||||
bool mNeedUnmap;
|
||||
uint32_t mOffset;
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
}; // namespace android
|
||||
|
||||
#endif // ANDROID_MEMORY_HEAP_BASE_H
|
||||
@@ -0,0 +1,68 @@
|
||||
/*
|
||||
* Copyright (C) 2008 The Android Open Source Project
|
||||
* Copyright 2011, Samsung Electronics Co. LTD
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
/*!
|
||||
* \file MemoryHeapIon.h
|
||||
* \brief header file for MemoryHeapIon
|
||||
* \author MinGu, Jeon(mingu85.jeon)
|
||||
* \date 2011/11/20
|
||||
*
|
||||
* <b>Revision History: </b>
|
||||
* - 2011/11/21 : MinGu, Jeon(mingu85.jeon)) \n
|
||||
* Initial version
|
||||
* - 2012/11/29 : MinGu, Jeon(mingu85.jeon)) \n
|
||||
* Change name
|
||||
*/
|
||||
|
||||
#ifndef ANDROID_MEMORY_HEAP_ION_H
|
||||
#define ANDROID_MEMORY_HEAP_ION_H
|
||||
|
||||
#include <binder/IMemory.h>
|
||||
#include <binder/MemoryHeapBase.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define MHB_ION_HEAP_SYSTEM_CONTIG_MASK (1 << 1)
|
||||
#define MHB_ION_HEAP_EXYNOS_CONTIG_MASK (1 << 4)
|
||||
#define MHB_ION_HEAP_EXYNOS_MASK (1 << 5)
|
||||
#define MHB_ION_HEAP_SYSTEM_MASK (1 << 6)
|
||||
|
||||
#define MHB_ION_FLAG_CACHED (1 << 16)
|
||||
#define MHB_ION_FLAG_CACHED_NEEDS_SYNC (1 << 17)
|
||||
#define MHB_ION_FLAG_PRESERVE_KMAP (1 << 18)
|
||||
|
||||
#define MHB_ION_EXYNOS_VIDEO_MASK (1 << 21)
|
||||
#define MHB_ION_EXYNOS_MFC_INPUT_MASK (1 << 25)
|
||||
#define MHB_ION_EXYNOS_MFC_OUTPUT_MASK (1 << 26)
|
||||
#define MHB_ION_EXYNOS_GSC_MASK (1 << 27)
|
||||
#define MHB_ION_EXYNOS_FIMD_VIDEO_MASK (1 << 28)
|
||||
|
||||
namespace android {
|
||||
|
||||
class MemoryHeapIon : public MemoryHeapBase
|
||||
{
|
||||
public:
|
||||
enum {
|
||||
USE_ION_FD = IMemoryHeap::USE_ION_FD
|
||||
};
|
||||
MemoryHeapIon(size_t size, uint32_t flags = 0, char const* name = NULL);
|
||||
MemoryHeapIon(int fd, size_t size, uint32_t flags = 0, uint32_t offset = 0);
|
||||
~MemoryHeapIon();
|
||||
private:
|
||||
int mIonClient;
|
||||
};
|
||||
|
||||
};
|
||||
#endif
|
||||
436
phonelibs/android_frameworks_native/include/binder/Parcel.h
Normal file
436
phonelibs/android_frameworks_native/include/binder/Parcel.h
Normal file
@@ -0,0 +1,436 @@
|
||||
/*
|
||||
* Copyright (C) 2005 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 ANDROID_PARCEL_H
|
||||
#define ANDROID_PARCEL_H
|
||||
|
||||
#include <cutils/native_handle.h>
|
||||
#include <utils/Errors.h>
|
||||
#include <utils/RefBase.h>
|
||||
#include <utils/String16.h>
|
||||
#include <utils/Vector.h>
|
||||
#include <utils/Flattenable.h>
|
||||
#include <linux/binder.h>
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
namespace android {
|
||||
|
||||
template <typename T> class Flattenable;
|
||||
template <typename T> class LightFlattenable;
|
||||
class IBinder;
|
||||
class IPCThreadState;
|
||||
class ProcessState;
|
||||
class String8;
|
||||
class TextOutput;
|
||||
|
||||
class Parcel {
|
||||
friend class IPCThreadState;
|
||||
public:
|
||||
class ReadableBlob;
|
||||
class WritableBlob;
|
||||
|
||||
Parcel();
|
||||
~Parcel();
|
||||
|
||||
const uint8_t* data() const;
|
||||
size_t dataSize() const;
|
||||
size_t dataAvail() const;
|
||||
size_t dataPosition() const;
|
||||
size_t dataCapacity() const;
|
||||
|
||||
status_t setDataSize(size_t size);
|
||||
void setDataPosition(size_t pos) const;
|
||||
status_t setDataCapacity(size_t size);
|
||||
|
||||
status_t setData(const uint8_t* buffer, size_t len);
|
||||
|
||||
status_t appendFrom(const Parcel *parcel,
|
||||
size_t start, size_t len);
|
||||
|
||||
bool allowFds() const;
|
||||
bool pushAllowFds(bool allowFds);
|
||||
void restoreAllowFds(bool lastValue);
|
||||
|
||||
bool hasFileDescriptors() const;
|
||||
|
||||
// Writes the RPC header.
|
||||
status_t writeInterfaceToken(const String16& interface);
|
||||
|
||||
// Parses the RPC header, returning true if the interface name
|
||||
// in the header matches the expected interface from the caller.
|
||||
//
|
||||
// Additionally, enforceInterface does part of the work of
|
||||
// propagating the StrictMode policy mask, populating the current
|
||||
// IPCThreadState, which as an optimization may optionally be
|
||||
// passed in.
|
||||
bool enforceInterface(const String16& interface,
|
||||
IPCThreadState* threadState = NULL) const;
|
||||
bool checkInterface(IBinder*) const;
|
||||
|
||||
void freeData();
|
||||
|
||||
private:
|
||||
const binder_size_t* objects() const;
|
||||
|
||||
public:
|
||||
size_t objectsCount() const;
|
||||
|
||||
status_t errorCheck() const;
|
||||
void setError(status_t err);
|
||||
|
||||
status_t write(const void* data, size_t len);
|
||||
void* writeInplace(size_t len);
|
||||
status_t writeUnpadded(const void* data, size_t len);
|
||||
status_t writeInt32(int32_t val);
|
||||
status_t writeUint32(uint32_t val);
|
||||
status_t writeInt64(int64_t val);
|
||||
status_t writeUint64(uint64_t val);
|
||||
status_t writeFloat(float val);
|
||||
status_t writeDouble(double val);
|
||||
status_t writeCString(const char* str);
|
||||
status_t writeString8(const String8& str);
|
||||
status_t writeString16(const String16& str);
|
||||
status_t writeString16(const char16_t* str, size_t len);
|
||||
status_t writeStrongBinder(const sp<IBinder>& val);
|
||||
status_t writeWeakBinder(const wp<IBinder>& val);
|
||||
status_t writeInt32Array(size_t len, const int32_t *val);
|
||||
status_t writeByteArray(size_t len, const uint8_t *val);
|
||||
|
||||
template<typename T>
|
||||
status_t write(const Flattenable<T>& val);
|
||||
|
||||
template<typename T>
|
||||
status_t write(const LightFlattenable<T>& val);
|
||||
|
||||
|
||||
// Place a native_handle into the parcel (the native_handle's file-
|
||||
// descriptors are dup'ed, so it is safe to delete the native_handle
|
||||
// when this function returns).
|
||||
// Doesn't take ownership of the native_handle.
|
||||
status_t writeNativeHandle(const native_handle* handle);
|
||||
|
||||
// Place a file descriptor into the parcel. The given fd must remain
|
||||
// valid for the lifetime of the parcel.
|
||||
// The Parcel does not take ownership of the given fd unless you ask it to.
|
||||
status_t writeFileDescriptor(int fd, bool takeOwnership = false);
|
||||
|
||||
// Place a file descriptor into the parcel. A dup of the fd is made, which
|
||||
// will be closed once the parcel is destroyed.
|
||||
status_t writeDupFileDescriptor(int fd);
|
||||
|
||||
// Writes a blob to the parcel.
|
||||
// If the blob is small, then it is stored in-place, otherwise it is
|
||||
// transferred by way of an anonymous shared memory region. Prefer sending
|
||||
// immutable blobs if possible since they may be subsequently transferred between
|
||||
// processes without further copying whereas mutable blobs always need to be copied.
|
||||
// The caller should call release() on the blob after writing its contents.
|
||||
status_t writeBlob(size_t len, bool mutableCopy, WritableBlob* outBlob);
|
||||
|
||||
// Write an existing immutable blob file descriptor to the parcel.
|
||||
// This allows the client to send the same blob to multiple processes
|
||||
// as long as it keeps a dup of the blob file descriptor handy for later.
|
||||
status_t writeDupImmutableBlobFileDescriptor(int fd);
|
||||
|
||||
status_t writeObject(const flat_binder_object& val, bool nullMetaData);
|
||||
|
||||
// Like Parcel.java's writeNoException(). Just writes a zero int32.
|
||||
// Currently the native implementation doesn't do any of the StrictMode
|
||||
// stack gathering and serialization that the Java implementation does.
|
||||
status_t writeNoException();
|
||||
|
||||
void remove(size_t start, size_t amt);
|
||||
|
||||
status_t read(void* outData, size_t len) const;
|
||||
const void* readInplace(size_t len) const;
|
||||
int32_t readInt32() const;
|
||||
status_t readInt32(int32_t *pArg) const;
|
||||
uint32_t readUint32() const;
|
||||
status_t readUint32(uint32_t *pArg) const;
|
||||
int64_t readInt64() const;
|
||||
status_t readInt64(int64_t *pArg) const;
|
||||
uint64_t readUint64() const;
|
||||
status_t readUint64(uint64_t *pArg) const;
|
||||
float readFloat() const;
|
||||
status_t readFloat(float *pArg) const;
|
||||
double readDouble() const;
|
||||
status_t readDouble(double *pArg) const;
|
||||
intptr_t readIntPtr() const;
|
||||
status_t readIntPtr(intptr_t *pArg) const;
|
||||
|
||||
const char* readCString() const;
|
||||
String8 readString8() const;
|
||||
String16 readString16() const;
|
||||
const char16_t* readString16Inplace(size_t* outLen) const;
|
||||
sp<IBinder> readStrongBinder() const;
|
||||
wp<IBinder> readWeakBinder() const;
|
||||
|
||||
template<typename T>
|
||||
status_t read(Flattenable<T>& val) const;
|
||||
|
||||
template<typename T>
|
||||
status_t read(LightFlattenable<T>& val) const;
|
||||
|
||||
// Like Parcel.java's readExceptionCode(). Reads the first int32
|
||||
// off of a Parcel's header, returning 0 or the negative error
|
||||
// code on exceptions, but also deals with skipping over rich
|
||||
// response headers. Callers should use this to read & parse the
|
||||
// response headers rather than doing it by hand.
|
||||
int32_t readExceptionCode() const;
|
||||
|
||||
// Retrieve native_handle from the parcel. This returns a copy of the
|
||||
// parcel's native_handle (the caller takes ownership). The caller
|
||||
// must free the native_handle with native_handle_close() and
|
||||
// native_handle_delete().
|
||||
native_handle* readNativeHandle() const;
|
||||
|
||||
|
||||
// Retrieve a file descriptor from the parcel. This returns the raw fd
|
||||
// in the parcel, which you do not own -- use dup() to get your own copy.
|
||||
int readFileDescriptor() const;
|
||||
|
||||
// Reads a blob from the parcel.
|
||||
// The caller should call release() on the blob after reading its contents.
|
||||
status_t readBlob(size_t len, ReadableBlob* outBlob) const;
|
||||
|
||||
const flat_binder_object* readObject(bool nullMetaData) const;
|
||||
|
||||
// Explicitly close all file descriptors in the parcel.
|
||||
void closeFileDescriptors();
|
||||
|
||||
// Debugging: get metrics on current allocations.
|
||||
static size_t getGlobalAllocSize();
|
||||
static size_t getGlobalAllocCount();
|
||||
|
||||
private:
|
||||
typedef void (*release_func)(Parcel* parcel,
|
||||
const uint8_t* data, size_t dataSize,
|
||||
const binder_size_t* objects, size_t objectsSize,
|
||||
void* cookie);
|
||||
|
||||
uintptr_t ipcData() const;
|
||||
size_t ipcDataSize() const;
|
||||
uintptr_t ipcObjects() const;
|
||||
size_t ipcObjectsCount() const;
|
||||
void ipcSetDataReference(const uint8_t* data, size_t dataSize,
|
||||
const binder_size_t* objects, size_t objectsCount,
|
||||
release_func relFunc, void* relCookie);
|
||||
|
||||
public:
|
||||
void print(TextOutput& to, uint32_t flags = 0) const;
|
||||
|
||||
private:
|
||||
Parcel(const Parcel& o);
|
||||
Parcel& operator=(const Parcel& o);
|
||||
|
||||
status_t finishWrite(size_t len);
|
||||
void releaseObjects();
|
||||
void acquireObjects();
|
||||
status_t growData(size_t len);
|
||||
status_t restartWrite(size_t desired);
|
||||
status_t continueWrite(size_t desired);
|
||||
status_t writePointer(uintptr_t val);
|
||||
status_t readPointer(uintptr_t *pArg) const;
|
||||
uintptr_t readPointer() const;
|
||||
void freeDataNoInit();
|
||||
void initState();
|
||||
void scanForFds() const;
|
||||
|
||||
template<class T>
|
||||
status_t readAligned(T *pArg) const;
|
||||
|
||||
template<class T> T readAligned() const;
|
||||
|
||||
template<class T>
|
||||
status_t writeAligned(T val);
|
||||
|
||||
status_t mError;
|
||||
uint8_t* mData;
|
||||
size_t mDataSize;
|
||||
size_t mDataCapacity;
|
||||
mutable size_t mDataPos;
|
||||
binder_size_t* mObjects;
|
||||
size_t mObjectsSize;
|
||||
size_t mObjectsCapacity;
|
||||
mutable size_t mNextObjectHint;
|
||||
|
||||
mutable bool mFdsKnown;
|
||||
mutable bool mHasFds;
|
||||
bool mAllowFds;
|
||||
|
||||
release_func mOwner;
|
||||
void* mOwnerCookie;
|
||||
|
||||
class Blob {
|
||||
public:
|
||||
Blob();
|
||||
~Blob();
|
||||
|
||||
void clear();
|
||||
void release();
|
||||
inline size_t size() const { return mSize; }
|
||||
inline int fd() const { return mFd; };
|
||||
inline bool isMutable() const { return mMutable; }
|
||||
|
||||
protected:
|
||||
void init(int fd, void* data, size_t size, bool isMutable);
|
||||
|
||||
int mFd; // owned by parcel so not closed when released
|
||||
void* mData;
|
||||
size_t mSize;
|
||||
bool mMutable;
|
||||
};
|
||||
|
||||
class FlattenableHelperInterface {
|
||||
protected:
|
||||
~FlattenableHelperInterface() { }
|
||||
public:
|
||||
virtual size_t getFlattenedSize() const = 0;
|
||||
virtual size_t getFdCount() const = 0;
|
||||
virtual status_t flatten(void* buffer, size_t size, int* fds, size_t count) const = 0;
|
||||
virtual status_t unflatten(void const* buffer, size_t size, int const* fds, size_t count) = 0;
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
class FlattenableHelper : public FlattenableHelperInterface {
|
||||
friend class Parcel;
|
||||
const Flattenable<T>& val;
|
||||
explicit FlattenableHelper(const Flattenable<T>& val) : val(val) { }
|
||||
|
||||
public:
|
||||
virtual size_t getFlattenedSize() const {
|
||||
return val.getFlattenedSize();
|
||||
}
|
||||
virtual size_t getFdCount() const {
|
||||
return val.getFdCount();
|
||||
}
|
||||
virtual status_t flatten(void* buffer, size_t size, int* fds, size_t count) const {
|
||||
return val.flatten(buffer, size, fds, count);
|
||||
}
|
||||
virtual status_t unflatten(void const* buffer, size_t size, int const* fds, size_t count) {
|
||||
return const_cast<Flattenable<T>&>(val).unflatten(buffer, size, fds, count);
|
||||
}
|
||||
};
|
||||
status_t write(const FlattenableHelperInterface& val);
|
||||
status_t read(FlattenableHelperInterface& val) const;
|
||||
|
||||
public:
|
||||
class ReadableBlob : public Blob {
|
||||
friend class Parcel;
|
||||
public:
|
||||
inline const void* data() const { return mData; }
|
||||
inline void* mutableData() { return isMutable() ? mData : NULL; }
|
||||
};
|
||||
|
||||
class WritableBlob : public Blob {
|
||||
friend class Parcel;
|
||||
public:
|
||||
inline void* data() { return mData; }
|
||||
};
|
||||
|
||||
#ifndef DISABLE_ASHMEM_TRACKING
|
||||
private:
|
||||
size_t mOpenAshmemSize;
|
||||
#endif
|
||||
|
||||
public:
|
||||
// TODO: Remove once ABI can be changed.
|
||||
size_t getBlobAshmemSize() const;
|
||||
size_t getOpenAshmemSize() const;
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
template<typename T>
|
||||
status_t Parcel::write(const Flattenable<T>& val) {
|
||||
const FlattenableHelper<T> helper(val);
|
||||
return write(helper);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
status_t Parcel::write(const LightFlattenable<T>& val) {
|
||||
size_t size(val.getFlattenedSize());
|
||||
if (!val.isFixedSize()) {
|
||||
status_t err = writeInt32(size);
|
||||
if (err != NO_ERROR) {
|
||||
return err;
|
||||
}
|
||||
}
|
||||
if (size) {
|
||||
void* buffer = writeInplace(size);
|
||||
if (buffer == NULL)
|
||||
return NO_MEMORY;
|
||||
return val.flatten(buffer, size);
|
||||
}
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
status_t Parcel::read(Flattenable<T>& val) const {
|
||||
FlattenableHelper<T> helper(val);
|
||||
return read(helper);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
status_t Parcel::read(LightFlattenable<T>& val) const {
|
||||
size_t size;
|
||||
if (val.isFixedSize()) {
|
||||
size = val.getFlattenedSize();
|
||||
} else {
|
||||
int32_t s;
|
||||
status_t err = readInt32(&s);
|
||||
if (err != NO_ERROR) {
|
||||
return err;
|
||||
}
|
||||
size = s;
|
||||
}
|
||||
if (size) {
|
||||
void const* buffer = readInplace(size);
|
||||
return buffer == NULL ? NO_MEMORY :
|
||||
val.unflatten(buffer, size);
|
||||
}
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
inline TextOutput& operator<<(TextOutput& to, const Parcel& parcel)
|
||||
{
|
||||
parcel.print(to);
|
||||
return to;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
// Generic acquire and release of objects.
|
||||
void acquire_object(const sp<ProcessState>& proc,
|
||||
const flat_binder_object& obj, const void* who);
|
||||
void release_object(const sp<ProcessState>& proc,
|
||||
const flat_binder_object& obj, const void* who);
|
||||
|
||||
void flatten_binder(const sp<ProcessState>& proc,
|
||||
const sp<IBinder>& binder, flat_binder_object* out);
|
||||
void flatten_binder(const sp<ProcessState>& proc,
|
||||
const wp<IBinder>& binder, flat_binder_object* out);
|
||||
status_t unflatten_binder(const sp<ProcessState>& proc,
|
||||
const flat_binder_object& flat, sp<IBinder>* out);
|
||||
status_t unflatten_binder(const sp<ProcessState>& proc,
|
||||
const flat_binder_object& flat, wp<IBinder>* out);
|
||||
|
||||
}; // namespace android
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
#endif // ANDROID_PARCEL_H
|
||||
@@ -0,0 +1,80 @@
|
||||
/*
|
||||
* Copyright (C) 2009 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 BINDER_PERMISSION_H
|
||||
#define BINDER_PERMISSION_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <utils/String16.h>
|
||||
#include <utils/Singleton.h>
|
||||
#include <utils/SortedVector.h>
|
||||
|
||||
namespace android {
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
* PermissionCache caches permission checks for a given uid.
|
||||
*
|
||||
* Currently the cache is not updated when there is a permission change,
|
||||
* for instance when an application is uninstalled.
|
||||
*
|
||||
* IMPORTANT: for the reason stated above, only system permissions are safe
|
||||
* to cache. This restriction may be lifted at a later time.
|
||||
*
|
||||
*/
|
||||
|
||||
class PermissionCache : Singleton<PermissionCache> {
|
||||
struct Entry {
|
||||
String16 name;
|
||||
uid_t uid;
|
||||
bool granted;
|
||||
inline bool operator < (const Entry& e) const {
|
||||
return (uid == e.uid) ? (name < e.name) : (uid < e.uid);
|
||||
}
|
||||
};
|
||||
mutable Mutex mLock;
|
||||
// we pool all the permission names we see, as many permissions checks
|
||||
// will have identical names
|
||||
SortedVector< String16 > mPermissionNamesPool;
|
||||
// this is our cache per say. it stores pooled names.
|
||||
SortedVector< Entry > mCache;
|
||||
|
||||
// free the whole cache, but keep the permission name pool
|
||||
void purge();
|
||||
|
||||
status_t check(bool* granted,
|
||||
const String16& permission, uid_t uid) const;
|
||||
|
||||
void cache(const String16& permission, uid_t uid, bool granted);
|
||||
|
||||
public:
|
||||
PermissionCache();
|
||||
|
||||
static bool checkCallingPermission(const String16& permission);
|
||||
|
||||
static bool checkCallingPermission(const String16& permission,
|
||||
int32_t* outPid, int32_t* outUid);
|
||||
|
||||
static bool checkPermission(const String16& permission,
|
||||
pid_t pid, uid_t uid);
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
}; // namespace android
|
||||
|
||||
#endif /* BINDER_PERMISSION_H */
|
||||
@@ -0,0 +1,65 @@
|
||||
/*
|
||||
* Copyright 2015 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 ANDROID_PROCESS_INFO_SERVICE_H
|
||||
#define ANDROID_PROCESS_INFO_SERVICE_H
|
||||
|
||||
#include <binder/IProcessInfoService.h>
|
||||
#include <utils/Errors.h>
|
||||
#include <utils/Singleton.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
namespace android {
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
class ProcessInfoService : public Singleton<ProcessInfoService> {
|
||||
|
||||
friend class Singleton<ProcessInfoService>;
|
||||
sp<IProcessInfoService> mProcessInfoService;
|
||||
Mutex mProcessInfoLock;
|
||||
|
||||
ProcessInfoService();
|
||||
|
||||
status_t getProcessStatesImpl(size_t length, /*in*/ int32_t* pids, /*out*/ int32_t* states);
|
||||
void updateBinderLocked();
|
||||
|
||||
static const int BINDER_ATTEMPT_LIMIT = 5;
|
||||
|
||||
public:
|
||||
|
||||
/**
|
||||
* For each PID in the given "pids" input array, write the current process state
|
||||
* for that process into the "states" output array, or
|
||||
* ActivityManager.PROCESS_STATE_NONEXISTENT * to indicate that no process with the given PID
|
||||
* exists.
|
||||
*
|
||||
* Returns NO_ERROR if this operation was successful, or a negative error code otherwise.
|
||||
*/
|
||||
static status_t getProcessStatesFromPids(size_t length, /*in*/ int32_t* pids,
|
||||
/*out*/ int32_t* states) {
|
||||
return ProcessInfoService::getInstance().getProcessStatesImpl(length, /*in*/ pids,
|
||||
/*out*/ states);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
}; // namespace android
|
||||
|
||||
#endif // ANDROID_PROCESS_INFO_SERVICE_H
|
||||
|
||||
@@ -0,0 +1,116 @@
|
||||
/*
|
||||
* Copyright (C) 2005 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 ANDROID_PROCESS_STATE_H
|
||||
#define ANDROID_PROCESS_STATE_H
|
||||
|
||||
#include <binder/IBinder.h>
|
||||
#include <utils/KeyedVector.h>
|
||||
#include <utils/String8.h>
|
||||
#include <utils/String16.h>
|
||||
|
||||
#include <utils/threads.h>
|
||||
|
||||
#include <pthread.h>
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
namespace android {
|
||||
|
||||
class IPCThreadState;
|
||||
|
||||
class ProcessState : public virtual RefBase
|
||||
{
|
||||
public:
|
||||
static sp<ProcessState> self();
|
||||
|
||||
void setContextObject(const sp<IBinder>& object);
|
||||
sp<IBinder> getContextObject(const sp<IBinder>& caller);
|
||||
|
||||
void setContextObject(const sp<IBinder>& object,
|
||||
const String16& name);
|
||||
sp<IBinder> getContextObject(const String16& name,
|
||||
const sp<IBinder>& caller);
|
||||
|
||||
void startThreadPool();
|
||||
|
||||
typedef bool (*context_check_func)(const String16& name,
|
||||
const sp<IBinder>& caller,
|
||||
void* userData);
|
||||
|
||||
bool isContextManager(void) const;
|
||||
bool becomeContextManager(
|
||||
context_check_func checkFunc,
|
||||
void* userData);
|
||||
|
||||
sp<IBinder> getStrongProxyForHandle(int32_t handle);
|
||||
wp<IBinder> getWeakProxyForHandle(int32_t handle);
|
||||
void expungeHandle(int32_t handle, IBinder* binder);
|
||||
|
||||
void spawnPooledThread(bool isMain);
|
||||
|
||||
status_t setThreadPoolMaxThreadCount(size_t maxThreads);
|
||||
void giveThreadPoolName();
|
||||
|
||||
private:
|
||||
friend class IPCThreadState;
|
||||
|
||||
ProcessState();
|
||||
~ProcessState();
|
||||
|
||||
ProcessState(const ProcessState& o);
|
||||
ProcessState& operator=(const ProcessState& o);
|
||||
String8 makeBinderThreadName();
|
||||
|
||||
struct handle_entry {
|
||||
IBinder* binder;
|
||||
RefBase::weakref_type* refs;
|
||||
};
|
||||
|
||||
handle_entry* lookupHandleLocked(int32_t handle);
|
||||
|
||||
int mDriverFD;
|
||||
void* mVMStart;
|
||||
|
||||
// Protects thread count variable below.
|
||||
pthread_mutex_t mThreadCountLock;
|
||||
pthread_cond_t mThreadCountDecrement;
|
||||
// Number of binder threads current executing a command.
|
||||
size_t mExecutingThreadsCount;
|
||||
// Maximum number for binder threads allowed for this process.
|
||||
size_t mMaxThreads;
|
||||
|
||||
mutable Mutex mLock; // protects everything below.
|
||||
|
||||
Vector<handle_entry>mHandleToObject;
|
||||
|
||||
bool mManagesContexts;
|
||||
context_check_func mBinderContextCheckFunc;
|
||||
void* mBinderContextUserData;
|
||||
|
||||
KeyedVector<String16, sp<IBinder> >
|
||||
mContexts;
|
||||
|
||||
|
||||
String8 mRootDir;
|
||||
bool mThreadPoolStarted;
|
||||
volatile int32_t mThreadPoolSeq;
|
||||
};
|
||||
|
||||
}; // namespace android
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
#endif // ANDROID_PROCESS_STATE_H
|
||||
195
phonelibs/android_frameworks_native/include/binder/TextOutput.h
Normal file
195
phonelibs/android_frameworks_native/include/binder/TextOutput.h
Normal file
@@ -0,0 +1,195 @@
|
||||
/*
|
||||
* Copyright (C) 2006 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 ANDROID_TEXTOUTPUT_H
|
||||
#define ANDROID_TEXTOUTPUT_H
|
||||
|
||||
#include <utils/Errors.h>
|
||||
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
namespace android {
|
||||
|
||||
class String8;
|
||||
class String16;
|
||||
|
||||
class TextOutput
|
||||
{
|
||||
public:
|
||||
TextOutput();
|
||||
virtual ~TextOutput();
|
||||
|
||||
virtual status_t print(const char* txt, size_t len) = 0;
|
||||
virtual void moveIndent(int delta) = 0;
|
||||
|
||||
class Bundle {
|
||||
public:
|
||||
inline Bundle(TextOutput& to) : mTO(to) { to.pushBundle(); }
|
||||
inline ~Bundle() { mTO.popBundle(); }
|
||||
private:
|
||||
TextOutput& mTO;
|
||||
};
|
||||
|
||||
virtual void pushBundle() = 0;
|
||||
virtual void popBundle() = 0;
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
// Text output stream for printing to the log (via utils/Log.h).
|
||||
extern TextOutput& alog;
|
||||
|
||||
// Text output stream for printing to stdout.
|
||||
extern TextOutput& aout;
|
||||
|
||||
// Text output stream for printing to stderr.
|
||||
extern TextOutput& aerr;
|
||||
|
||||
typedef TextOutput& (*TextOutputManipFunc)(TextOutput&);
|
||||
|
||||
TextOutput& endl(TextOutput& to);
|
||||
TextOutput& indent(TextOutput& to);
|
||||
TextOutput& dedent(TextOutput& to);
|
||||
|
||||
TextOutput& operator<<(TextOutput& to, const char* str);
|
||||
TextOutput& operator<<(TextOutput& to, char); // writes raw character
|
||||
TextOutput& operator<<(TextOutput& to, bool);
|
||||
TextOutput& operator<<(TextOutput& to, int);
|
||||
TextOutput& operator<<(TextOutput& to, long);
|
||||
TextOutput& operator<<(TextOutput& to, unsigned int);
|
||||
TextOutput& operator<<(TextOutput& to, unsigned long);
|
||||
TextOutput& operator<<(TextOutput& to, long long);
|
||||
TextOutput& operator<<(TextOutput& to, unsigned long long);
|
||||
TextOutput& operator<<(TextOutput& to, float);
|
||||
TextOutput& operator<<(TextOutput& to, double);
|
||||
TextOutput& operator<<(TextOutput& to, TextOutputManipFunc func);
|
||||
TextOutput& operator<<(TextOutput& to, const void*);
|
||||
TextOutput& operator<<(TextOutput& to, const String8& val);
|
||||
TextOutput& operator<<(TextOutput& to, const String16& val);
|
||||
|
||||
class TypeCode
|
||||
{
|
||||
public:
|
||||
inline TypeCode(uint32_t code);
|
||||
inline ~TypeCode();
|
||||
|
||||
inline uint32_t typeCode() const;
|
||||
|
||||
private:
|
||||
uint32_t mCode;
|
||||
};
|
||||
|
||||
TextOutput& operator<<(TextOutput& to, const TypeCode& val);
|
||||
|
||||
class HexDump
|
||||
{
|
||||
public:
|
||||
HexDump(const void *buf, size_t size, size_t bytesPerLine=16);
|
||||
inline ~HexDump();
|
||||
|
||||
inline HexDump& setBytesPerLine(size_t bytesPerLine);
|
||||
inline HexDump& setSingleLineCutoff(int32_t bytes);
|
||||
inline HexDump& setAlignment(size_t alignment);
|
||||
inline HexDump& setCArrayStyle(bool enabled);
|
||||
|
||||
inline const void* buffer() const;
|
||||
inline size_t size() const;
|
||||
inline size_t bytesPerLine() const;
|
||||
inline int32_t singleLineCutoff() const;
|
||||
inline size_t alignment() const;
|
||||
inline bool carrayStyle() const;
|
||||
|
||||
private:
|
||||
const void* mBuffer;
|
||||
size_t mSize;
|
||||
size_t mBytesPerLine;
|
||||
int32_t mSingleLineCutoff;
|
||||
size_t mAlignment;
|
||||
bool mCArrayStyle;
|
||||
};
|
||||
|
||||
TextOutput& operator<<(TextOutput& to, const HexDump& val);
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// No user servicable parts below.
|
||||
|
||||
inline TextOutput& endl(TextOutput& to)
|
||||
{
|
||||
to.print("\n", 1);
|
||||
return to;
|
||||
}
|
||||
|
||||
inline TextOutput& indent(TextOutput& to)
|
||||
{
|
||||
to.moveIndent(1);
|
||||
return to;
|
||||
}
|
||||
|
||||
inline TextOutput& dedent(TextOutput& to)
|
||||
{
|
||||
to.moveIndent(-1);
|
||||
return to;
|
||||
}
|
||||
|
||||
inline TextOutput& operator<<(TextOutput& to, const char* str)
|
||||
{
|
||||
to.print(str, strlen(str));
|
||||
return to;
|
||||
}
|
||||
|
||||
inline TextOutput& operator<<(TextOutput& to, char c)
|
||||
{
|
||||
to.print(&c, 1);
|
||||
return to;
|
||||
}
|
||||
|
||||
inline TextOutput& operator<<(TextOutput& to, TextOutputManipFunc func)
|
||||
{
|
||||
return (*func)(to);
|
||||
}
|
||||
|
||||
inline TypeCode::TypeCode(uint32_t code) : mCode(code) { }
|
||||
inline TypeCode::~TypeCode() { }
|
||||
inline uint32_t TypeCode::typeCode() const { return mCode; }
|
||||
|
||||
inline HexDump::~HexDump() { }
|
||||
|
||||
inline HexDump& HexDump::setBytesPerLine(size_t bytesPerLine) {
|
||||
mBytesPerLine = bytesPerLine; return *this;
|
||||
}
|
||||
inline HexDump& HexDump::setSingleLineCutoff(int32_t bytes) {
|
||||
mSingleLineCutoff = bytes; return *this;
|
||||
}
|
||||
inline HexDump& HexDump::setAlignment(size_t alignment) {
|
||||
mAlignment = alignment; return *this;
|
||||
}
|
||||
inline HexDump& HexDump::setCArrayStyle(bool enabled) {
|
||||
mCArrayStyle = enabled; return *this;
|
||||
}
|
||||
|
||||
inline const void* HexDump::buffer() const { return mBuffer; }
|
||||
inline size_t HexDump::size() const { return mSize; }
|
||||
inline size_t HexDump::bytesPerLine() const { return mBytesPerLine; }
|
||||
inline int32_t HexDump::singleLineCutoff() const { return mSingleLineCutoff; }
|
||||
inline size_t HexDump::alignment() const { return mAlignment; }
|
||||
inline bool HexDump::carrayStyle() const { return mCArrayStyle; }
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
}; // namespace android
|
||||
|
||||
#endif // ANDROID_TEXTOUTPUT_H
|
||||
Reference in New Issue
Block a user