mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2025-02-18 00:30:47 +01:00
auto-t: add proper AccessPoint object class
The AP mode device APIs were hacked together and only able to start stop an AP. Now that the AP interface has more functionality its best to use the DBus class template to access the full AP interface capabilities.
This commit is contained in:
parent
c53280062c
commit
ba067fcf94
@ -299,6 +299,69 @@ class DeviceProvisioning(IWDDBusAbstract):
|
|||||||
def role(self):
|
def role(self):
|
||||||
return self._properties['Role']
|
return self._properties['Role']
|
||||||
|
|
||||||
|
class AccessPointDevice(IWDDBusAbstract):
|
||||||
|
'''
|
||||||
|
Class represents net.connman.iwd.AccessPoint
|
||||||
|
'''
|
||||||
|
_iface_name = IWD_AP_INTERFACE
|
||||||
|
|
||||||
|
def start(self, ssid, psk):
|
||||||
|
self._iface.Start(ssid, psk, reply_handler=self._success,
|
||||||
|
error_handler=self._failure)
|
||||||
|
self._wait_for_async_op()
|
||||||
|
|
||||||
|
IWD._wait_for_object_condition(self, 'obj.started == True')
|
||||||
|
|
||||||
|
def start_profile(self, ssid):
|
||||||
|
self._iface.StartProfile(ssid, reply_handler=self._success,
|
||||||
|
error_handler=self._failure)
|
||||||
|
self._wait_for_async_op()
|
||||||
|
|
||||||
|
IWD._wait_for_object_condition(self, 'obj.started == True')
|
||||||
|
|
||||||
|
def stop(self):
|
||||||
|
self._iface.Stop(reply_handler=self._success,
|
||||||
|
error_handler=self._failure)
|
||||||
|
self._wait_for_async_op()
|
||||||
|
|
||||||
|
IWD._wait_for_object_condition(self, 'obj.started == False')
|
||||||
|
|
||||||
|
def scan(self):
|
||||||
|
self._iface.Scan(reply_handler=self._success,
|
||||||
|
error_handler=self._failure)
|
||||||
|
self._wait_for_async_op()
|
||||||
|
|
||||||
|
IWD._wait_for_object_condition(self, 'obj.scanning == True')
|
||||||
|
IWD._wait_for_object_condition(self, 'obj.scanning == False')
|
||||||
|
|
||||||
|
def get_ordered_networks(self):
|
||||||
|
return self._iface.GetOrderedNetworks()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def started(self):
|
||||||
|
return self._properties['Started']
|
||||||
|
|
||||||
|
@property
|
||||||
|
def name(self):
|
||||||
|
return self._properties['Name']
|
||||||
|
|
||||||
|
@property
|
||||||
|
def scanning(self):
|
||||||
|
return self._properties['Scanning']
|
||||||
|
|
||||||
|
@property
|
||||||
|
def frequency(self):
|
||||||
|
return self._properties['Frequency']
|
||||||
|
|
||||||
|
@property
|
||||||
|
def pairwise_ciphers(self):
|
||||||
|
return self._properties['PairwiseCiphers']
|
||||||
|
|
||||||
|
@property
|
||||||
|
def group_cipher(self):
|
||||||
|
return self._properties['GroupCipher']
|
||||||
|
|
||||||
|
|
||||||
class Device(IWDDBusAbstract):
|
class Device(IWDDBusAbstract):
|
||||||
'''
|
'''
|
||||||
Class represents a network device object: net.connman.iwd.Device
|
Class represents a network device object: net.connman.iwd.Device
|
||||||
@ -312,6 +375,7 @@ class Device(IWDDBusAbstract):
|
|||||||
self._station_props = None
|
self._station_props = None
|
||||||
self._station_debug_obj = None
|
self._station_debug_obj = None
|
||||||
self._dpp_obj = None
|
self._dpp_obj = None
|
||||||
|
self._ap_obj = None
|
||||||
|
|
||||||
IWDDBusAbstract.__init__(self, *args, **kwargs)
|
IWDDBusAbstract.__init__(self, *args, **kwargs)
|
||||||
|
|
||||||
@ -354,6 +418,17 @@ class Device(IWDDBusAbstract):
|
|||||||
|
|
||||||
return self._station_debug_obj
|
return self._station_debug_obj
|
||||||
|
|
||||||
|
@property
|
||||||
|
def _ap(self):
|
||||||
|
if self._properties['Mode'] != 'ap':
|
||||||
|
self._prop_proxy.Set(IWD_DEVICE_INTERFACE, 'Mode', 'ap')
|
||||||
|
|
||||||
|
if self._ap_obj is None:
|
||||||
|
self._ap_obj = AccessPointDevice(object_path=self._object_path,
|
||||||
|
namespace=self._namespace)
|
||||||
|
|
||||||
|
return self._ap_obj
|
||||||
|
|
||||||
def _station_properties(self):
|
def _station_properties(self):
|
||||||
if self._station_props is not None:
|
if self._station_props is not None:
|
||||||
return self._station_props
|
return self._station_props
|
||||||
@ -605,20 +680,30 @@ class Device(IWDDBusAbstract):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise _convert_dbus_ex(e)
|
raise _convert_dbus_ex(e)
|
||||||
|
|
||||||
self._ap_iface = dbus.Interface(self._bus.get_object(IWD_SERVICE,
|
|
||||||
self.device_path),
|
|
||||||
IWD_AP_INTERFACE)
|
|
||||||
if psk:
|
if psk:
|
||||||
self._ap_iface.Start(ssid, psk, reply_handler=self._success,
|
self._ap.start(ssid, psk)
|
||||||
error_handler=self._failure)
|
|
||||||
else:
|
else:
|
||||||
self._ap_iface.StartProfile(ssid, reply_handler=self._success,
|
self._ap.start_profile(ssid)
|
||||||
error_handler=self._failure)
|
|
||||||
self._wait_for_async_op()
|
|
||||||
|
|
||||||
def stop_ap(self):
|
def stop_ap(self):
|
||||||
self._prop_proxy.Set(IWD_DEVICE_INTERFACE, 'Mode', 'station')
|
self._prop_proxy.Set(IWD_DEVICE_INTERFACE, 'Mode', 'station')
|
||||||
|
|
||||||
|
IWD._wait_for_object_condition(self, "obj._properties['Mode'] == 'station'")
|
||||||
|
|
||||||
|
@property
|
||||||
|
def group_cipher(self):
|
||||||
|
if self._properties['Mode'] != 'ap':
|
||||||
|
raise Exception('group_cipher only supported in AP mode')
|
||||||
|
|
||||||
|
return self._ap.group_cipher
|
||||||
|
|
||||||
|
@property
|
||||||
|
def pairwise_ciphers(self):
|
||||||
|
if self._properties['Mode'] != 'ap':
|
||||||
|
raise Exception('pairwise_cipher only supported in AP mode')
|
||||||
|
|
||||||
|
return self._ap.pairwise_ciphers
|
||||||
|
|
||||||
def connect_hidden_network(self, name):
|
def connect_hidden_network(self, name):
|
||||||
'''Connect to a hidden network
|
'''Connect to a hidden network
|
||||||
Possible exception: BusyEx
|
Possible exception: BusyEx
|
||||||
|
Loading…
x
Reference in New Issue
Block a user