Update to the new Device.id API

This commit is contained in:
Ole André Vadla Ravnås
2015-09-13 18:55:48 +02:00
parent 8780ffe303
commit c5c2e60f33
3 changed files with 27 additions and 21 deletions
+4 -4
View File
@@ -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 *
+22 -16
View File
@@ -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]
+1 -1
View File
@@ -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])