From c5c2e60f33bdaf369733c20b61ffbd54a7d72804 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ole=20Andr=C3=A9=20Vadla=20Ravn=C3=A5s?= Date: Sun, 13 Sep 2015 18:55:48 +0200 Subject: [PATCH] Update to the new Device.id API --- src/_frida.c | 8 ++++---- src/frida/__init__.py | 38 ++++++++++++++++++++++---------------- src/frida/core.py | 2 +- 3 files changed, 27 insertions(+), 21 deletions(-) diff --git a/src/_frida.c b/src/_frida.c index ea3d11e..b686bd6 100644 --- a/src/_frida.c +++ b/src/_frida.c @@ -72,7 +72,7 @@ struct _PyDevice FridaDevice * handle; - guint id; + const gchar * id; const gchar * name; PyObject * icon; const gchar * type; @@ -242,7 +242,7 @@ static PyMethodDef PyDevice_methods[] = static PyMemberDef PyDevice_members[] = { - { "id", T_UINT, G_STRUCT_OFFSET (PyDevice, id), READONLY, "Device ID."}, + { "id", T_STRING, G_STRUCT_OFFSET (PyDevice, id), READONLY, "Device ID."}, { "name", T_STRING, G_STRUCT_OFFSET (PyDevice, name), READONLY, "Human-readable device name."}, { "icon", T_OBJECT_EX, G_STRUCT_OFFSET (PyDevice, icon), READONLY, "Icon."}, { "type", T_STRING, G_STRUCT_OFFSET (PyDevice, type), READONLY, "Device type. One of: local, tether, remote."}, @@ -835,7 +835,7 @@ PyDevice_init (PyDevice * self) { self->handle = NULL; - self->id = 0; + self->id = NULL; self->name = NULL; self->icon = NULL; self->type = NULL; @@ -877,7 +877,7 @@ PyDevice_dealloc (PyDevice * self) static PyObject * PyDevice_repr (PyDevice * self) { - return PyRepr_FromFormat ("Device(id=%u, name=\"%s\", type='%s')", self->id, self->name, self->type); + return PyRepr_FromFormat ("Device(id=\"%s\", name=\"%s\", type='%s')", self->id, self->name, self->type); } static PyObject * diff --git a/src/frida/__init__.py b/src/frida/__init__.py index 0921676..1d17044 100644 --- a/src/frida/__init__.py +++ b/src/frida/__init__.py @@ -42,42 +42,48 @@ NotSupportedError = _frida.NotSupportedError ProtocolError = _frida.ProtocolError TransportError = _frida.TransportError -def spawn(argv, device_id = None): - return get_device_manager().get_device(device_id).spawn(argv) +def spawn(argv): + return get_device_manager().get_device().spawn(argv) -def resume(target, device_id = None): - get_device_manager().get_device(device_id).resume(target) +def resume(target): + get_device_manager().get_device().resume(target) -def kill(target, device_id = None): - get_device_manager().get_device(device_id).kill(target) +def kill(target): + get_device_manager().get_device().kill(target) -def attach(target, device_id = None): - return get_device_manager().get_device(device_id).attach(target) +def attach(target): + return get_device_manager().get_device().attach(target) + +def enumerate_devices(): + return get_device_manager().enumerate_devices() + +def get_device(id, timeout = 0): + return _get_device(lambda device: device.id == id, timeout) def get_usb_device(timeout = 0): - return _get_device('tether', timeout) + return _get_device(lambda device: device.type == 'tether', timeout) def get_remote_device(timeout = 0): - return _get_device('remote', timeout) + return _get_device(lambda device: device.type == 'remote', timeout) -def _get_device(type, timeout): +def _get_device(predicate, timeout): mgr = get_device_manager() - def find_usb_device(): - usb_devices = [device for device in mgr.enumerate_devices() if device.type == type] + def find_matching_device(): + usb_devices = [device for device in mgr.enumerate_devices() if predicate(device)] if len(usb_devices) > 0: return usb_devices[0] else: return None - device = find_usb_device() + device = find_matching_device() if device is None: result = [None] event = threading.Event() def on_devices_changed(): - result[0] = find_usb_device() + result[0] = find_matching_device() if result[0] is not None: event.set() mgr.on('changed', on_devices_changed) - device = find_usb_device() + device = find_matching_device() if device is None: event.wait(timeout) device = result[0] diff --git a/src/frida/core.py b/src/frida/core.py index ebc5872..b314d80 100644 --- a/src/frida/core.py +++ b/src/frida/core.py @@ -20,7 +20,7 @@ class DeviceManager(object): def enumerate_devices(self): return [Device(device) for device in self._impl.enumerate_devices()] - def get_device(self, device_id): + def get_device(self, device_id = None): devices = self._impl.enumerate_devices() if device_id is None: return Device(devices[0])