mirror of
https://github.com/frida/frida-python
synced 2026-06-08 14:16:17 +00:00
Update to the new Device.id API
This commit is contained in:
+4
-4
@@ -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
@@ -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
@@ -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])
|
||||
|
||||
Reference in New Issue
Block a user