8
import dbus.mainloop.glib
9
from optparse import OptionParser
11
class Rejected(dbus.DBusException):
12
_dbus_error_name = "org.bluez.Error.Rejected"
14
class Agent(dbus.service.Object):
15
exit_on_release = True
17
def set_exit_on_release(self, exit_on_release):
18
self.exit_on_release = exit_on_release
20
@dbus.service.method("org.bluez.Agent",
21
in_signature="", out_signature="")
24
if self.exit_on_release:
27
@dbus.service.method("org.bluez.Agent",
28
in_signature="os", out_signature="")
29
def Authorize(self, device, uuid):
30
print "Authorize (%s, %s)" % (device, uuid)
31
authorize = raw_input("Authorize connection (yes/no): ")
32
if (authorize == "yes"):
34
raise Rejected("Connection rejected by user")
36
@dbus.service.method("org.bluez.Agent",
37
in_signature="o", out_signature="s")
38
def RequestPinCode(self, device):
39
print "RequestPinCode (%s)" % (device)
40
return raw_input("Enter PIN Code: ")
42
@dbus.service.method("org.bluez.Agent",
43
in_signature="o", out_signature="u")
44
def RequestPasskey(self, device):
45
print "RequestPasskey (%s)" % (device)
46
passkey = raw_input("Enter passkey: ")
47
return dbus.UInt32(passkey)
49
@dbus.service.method("org.bluez.Agent",
50
in_signature="ou", out_signature="")
51
def DisplayPasskey(self, device, passkey):
52
print "DisplayPasskey (%s, %06d)" % (device, passkey)
54
@dbus.service.method("org.bluez.Agent",
55
in_signature="ou", out_signature="")
56
def RequestConfirmation(self, device, passkey):
57
print "RequestConfirmation (%s, %06d)" % (device, passkey)
58
confirm = raw_input("Confirm passkey (yes/no): ")
59
if (confirm == "yes"):
61
raise Rejected("Passkey doesn't match")
63
@dbus.service.method("org.bluez.Agent",
64
in_signature="s", out_signature="")
65
def ConfirmModeChange(self, mode):
66
print "ConfirmModeChange (%s)" % (mode)
67
authorize = raw_input("Authorize mode change (yes/no): ")
68
if (authorize == "yes"):
70
raise Rejected("Mode change by user")
72
@dbus.service.method("org.bluez.Agent",
73
in_signature="", out_signature="")
77
def create_device_reply(device):
78
print "New device (%s)" % (device)
81
def create_device_error(error):
82
print "Creating device failed: %s" % (error)
85
if __name__ == '__main__':
86
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
88
bus = dbus.SystemBus()
89
manager = dbus.Interface(bus.get_object("org.bluez", "/"),
92
capability = "KeyboardDisplay"
94
parser = OptionParser()
95
parser.add_option("-c", "--capability", action="store",
96
type="string", dest="capability")
97
(options, args) = parser.parse_args()
98
if options.capability:
99
capability = options.capability
102
path = manager.FindAdapter(args[0])
104
path = manager.DefaultAdapter()
106
adapter = dbus.Interface(bus.get_object("org.bluez", path),
110
agent = Agent(bus, path)
112
mainloop = gobject.MainLoop()
116
device = adapter.FindDevice(args[1])
117
adapter.RemoveDevice(device)
119
agent.set_exit_on_release(False)
120
adapter.CreatePairedDevice(args[1], path, capability,
121
reply_handler=create_device_reply,
122
error_handler=create_device_error)
124
adapter.RegisterAgent(path, capability)
125
print "Agent registered"
129
#adapter.UnregisterAgent(path)
130
#print "Agent unregistered"