From 3173afd4166dc99427ef827eeb3964a31ae3e261 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ole=20Andr=C3=A9=20Vadla=20Ravn=C3=A5s?= Date: Fri, 19 Feb 2016 02:48:14 +0100 Subject: [PATCH] Add `add_remote_device()` and `remove_remote_device()` to DeviceManager --- src/_frida.c | 41 +++++++++++++++++++++++++++++++++++++++++ src/frida/core.py | 6 ++++++ 2 files changed, 47 insertions(+) diff --git a/src/_frida.c b/src/_frida.c index afdcda9..10b4fa3 100644 --- a/src/_frida.c +++ b/src/_frida.c @@ -154,6 +154,8 @@ static int PyDeviceManager_init (PyDeviceManager * self); static void PyDeviceManager_dealloc (PyDeviceManager * self); static PyObject * PyDeviceManager_close (PyDeviceManager * self); static PyObject * PyDeviceManager_enumerate_devices (PyDeviceManager * self); +static PyObject * PyDeviceManager_add_remote_device (PyDeviceManager * self, PyObject * args); +static PyObject * PyDeviceManager_remove_remote_device (PyDeviceManager * self, PyObject * args); static PyObject * PyDeviceManager_on (PyDeviceManager * self, PyObject * args); static PyObject * PyDeviceManager_off (PyDeviceManager * self, PyObject * args); static void PyDeviceManager_on_changed (PyDeviceManager * self, FridaDeviceManager * handle); @@ -243,6 +245,8 @@ static PyMethodDef PyDeviceManager_methods[] = { { "close", (PyCFunction) PyDeviceManager_close, METH_NOARGS, "Close the device manager." }, { "enumerate_devices", (PyCFunction) PyDeviceManager_enumerate_devices, METH_NOARGS, "Enumerate devices." }, + { "add_remote_device", (PyCFunction) PyDeviceManager_add_remote_device, METH_VARARGS, "Add a remote device." }, + { "remove_remote_device", (PyCFunction) PyDeviceManager_remove_remote_device, METH_VARARGS, "Remove a remote device." }, { "on", (PyCFunction) PyDeviceManager_on, METH_VARARGS, "Add an event handler." }, { "off", (PyCFunction) PyDeviceManager_off, METH_VARARGS, "Remove an event handler." }, { NULL } @@ -778,6 +782,43 @@ PyDeviceManager_enumerate_devices (PyDeviceManager * self) return devices; } +static PyObject * +PyDeviceManager_add_remote_device (PyDeviceManager * self, PyObject * args) +{ + const char * host; + GError * error = NULL; + FridaDevice * result; + + if (!PyArg_ParseTuple (args, "s", &host)) + return NULL; + + Py_BEGIN_ALLOW_THREADS + result = frida_device_manager_add_remote_device_sync (self->handle, host, &error); + Py_END_ALLOW_THREADS + if (error != NULL) + return PyFrida_raise (error); + + return PyDevice_from_handle (result); +} + +static PyObject * +PyDeviceManager_remove_remote_device (PyDeviceManager * self, PyObject * args) +{ + const char * host; + GError * error = NULL; + + if (!PyArg_ParseTuple (args, "s", &host)) + return NULL; + + Py_BEGIN_ALLOW_THREADS + frida_device_manager_remove_remote_device_sync (self->handle, host, &error); + Py_END_ALLOW_THREADS + if (error != NULL) + return PyFrida_raise (error); + + Py_RETURN_NONE; +} + static PyObject * PyDeviceManager_on (PyDeviceManager * self, PyObject * args) { diff --git a/src/frida/core.py b/src/frida/core.py index ae9f149..dbb5642 100644 --- a/src/frida/core.py +++ b/src/frida/core.py @@ -20,6 +20,12 @@ class DeviceManager(object): def enumerate_devices(self): return [Device(device) for device in self._impl.enumerate_devices()] + def add_remote_device(self, host): + return Device(self._impl.add_remote_device(host)) + + def remove_remote_device(self, host): + self._impl.remove_remote_device(host) + def get_device(self, device_id): devices = self._impl.enumerate_devices() if device_id is None: