Skip to content
Snippets Groups Projects
Commit 27b9b9f8 authored by Sjoerd Simons's avatar Sjoerd Simons
Browse files

bluez: Sanitize command line arguments and fix outgoing pairing


The simple-agent command line arguments were a bit weird, it can just
act as an agent by giving no arugments or the adaptor to use. However to
pair a specific device a adaptor was mandatory (which is pointless on
most systems with just one adaptor). And for extra fun adding a third
argument which (could be whatever).

Sanitize things by making the device an optional argument rather then a
positional one. Drop the recgonition of the third positional argument
(bluetoothctl can be used instead to remove pairings).

On top of that switch to argparse (The recommended argument parser in
python 3), fix outgoing pairings (with bluez5 you can only trigger a
pairing with devices found during scanning it seems) and add a --yes
argument to accept all incoming connection making it more convenient to
use in testing.

Reviewed-by: default avatarPhilip Withnall <philip.withnall@collabora.co.uk>
Signed-off-by: default avatarSjoerd Simons <sjoerd.simons@collabora.co.uk>
Differential Revision: https://phabricator.apertis.org/D2207
parent 3c4317c9
No related branches found
No related tags found
No related merge requests found
......@@ -22,26 +22,35 @@
from gi.repository import GObject
import argparse
import sys
import dbus
import dbus.service
import dbus.mainloop.glib
from optparse import OptionParser
import os
# import from toplevel directory
sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.pardir))
from apertis_tests_lib.bluez import AskAgent
from apertis_tests_lib.bluez import build_device_path
from apertis_tests_lib.bluez import adapters_make_pairable
from apertis_tests_lib.bluez import build_device_path
from apertis_tests_lib.bluez import get_hci
from apertis_tests_lib.bluez import scan_for_device
if __name__ == '__main__':
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
mainloop = GObject.MainLoop()
parser = argparse.ArgumentParser()
parser.add_argument("-y", "--yes", help="Accept all connections",
action="store_true")
parser.add_argument("-d", "--device", help="HCI device to use")
parser.add_argument("-c", "--capability", default="KeyboardDisplay")
parser.add_argument("address", help="Address to pair", nargs='?')
args = parser.parse_args()
def pair_reply():
print("New device (%s)" % (device_path))
print("New device (%s)" % (args.address))
mainloop.quit()
def pair_error(error):
......@@ -55,17 +64,12 @@ if __name__ == '__main__':
'/org/bluez'),
'org.bluez.AgentManager1')
parser = OptionParser()
parser.add_option("-c", "--capability", type="string",
default='KeyboardDisplay')
(options, args) = parser.parse_args()
objs = manager.GetManagedObjects()
adapters = {p: i for p, i in objs.items()
if 'org.bluez.Adapter1' in i.keys()}
if len(args) > 0:
path = '/org/bluez/' + args[0]
if args.device:
path = '/org/bluez/' + args.device
else:
path = list(adapters.keys())[0]
......@@ -73,23 +77,22 @@ if __name__ == '__main__':
adapter = dbus.Interface(adapter_obj,
"org.bluez.Adapter1")
agent = AskAgent(bus, '/test/agent', mainloop)
if len(args) > 1:
device_path = build_device_path(args[0], args[1])
if len(args) > 2:
adapter.RemoveDevice(device_path)
agent = AskAgent(bus, '/test/agent', mainloop,
authorize_everything = args.yes)
if args.address:
agent.set_exit_on_release(False)
device = bus.get_object('org.bluez', device_path)
device.Pair(dbus_interface='org.bluez.Device1',
def pair(device):
device.Pair(dbus_interface='org.bluez.Device1',
reply_handler=pair_reply,
error_handler=pair_error,
timeout=60000)
scan_for_device(bus, adapter_obj, args.address, pair)
else:
adapters_make_pairable([ adapter_obj ])
agent_manager_iface.RegisterAgent('/test/agent', options.capability)
adapters_make_pairable([adapter_obj])
agent_manager_iface.RegisterAgent('/test/agent', args.capability)
agent_manager_iface.RequestDefaultAgent('/test/agent')
print("Agent registered")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment