Home | History | Annotate | Download | only in test
      1 #!/usr/bin/python
      2 
      3 import gobject
      4 
      5 import sys
      6 import dbus
      7 import dbus.service
      8 import dbus.mainloop.glib
      9 
     10 class Rejected(dbus.DBusException):
     11 	_dbus_error_name = "org.bluez.Error.Rejected"
     12 
     13 class Agent(dbus.service.Object):
     14 	exit_on_release = True
     15 
     16 	def set_exit_on_release(self, exit_on_release):
     17 		self.exit_on_release = exit_on_release
     18 
     19 	@dbus.service.method("org.bluez.Agent",
     20 					in_signature="", out_signature="")
     21 	def Release(self):
     22 		print "Release"
     23 		if self.exit_on_release:
     24 			mainloop.quit()
     25 
     26 	@dbus.service.method("org.bluez.Agent",
     27 					in_signature="os", out_signature="")
     28 	def Authorize(self, device, uuid):
     29 		print "Authorize (%s, %s)" % (device, uuid)
     30 		authorize = raw_input("Authorize connection (yes/no): ")
     31 		if (authorize == "yes"):
     32 			return
     33 		raise Rejected("Connection rejected by user")
     34 
     35 	@dbus.service.method("org.bluez.Agent",
     36 					in_signature="o", out_signature="s")
     37 	def RequestPinCode(self, device):
     38 		print "RequestPinCode (%s)" % (device)
     39 		return raw_input("Enter PIN Code: ")
     40 
     41 	@dbus.service.method("org.bluez.Agent",
     42 					in_signature="o", out_signature="u")
     43 	def RequestPasskey(self, device):
     44 		print "RequestPasskey (%s)" % (device)
     45 		passkey = raw_input("Enter passkey: ")
     46 		return dbus.UInt32(passkey)
     47 
     48 	@dbus.service.method("org.bluez.Agent",
     49 					in_signature="ou", out_signature="")
     50 	def DisplayPasskey(self, device, passkey):
     51 		print "DisplayPasskey (%s, %d)" % (device, passkey)
     52 
     53 	@dbus.service.method("org.bluez.Agent",
     54 					in_signature="ou", out_signature="")
     55 	def RequestConfirmation(self, device, passkey):
     56 		print "RequestConfirmation (%s, %d)" % (device, passkey)
     57 		confirm = raw_input("Confirm passkey (yes/no): ")
     58 		if (confirm == "yes"):
     59 			return
     60 		raise Rejected("Passkey doesn't match")
     61 
     62 	@dbus.service.method("org.bluez.Agent",
     63 					in_signature="s", out_signature="")
     64 	def ConfirmModeChange(self, mode):
     65 		print "ConfirmModeChange (%s)" % (mode)
     66 
     67 	@dbus.service.method("org.bluez.Agent",
     68 					in_signature="", out_signature="")
     69 	def Cancel(self):
     70 		print "Cancel"
     71 
     72 def create_device_reply(device):
     73 	print "New device (%s)" % (device)
     74 	mainloop.quit()
     75 
     76 def create_device_error(error):
     77 	print "Creating device failed: %s" % (error)
     78 	mainloop.quit()
     79 
     80 if __name__ == '__main__':
     81 	dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
     82 
     83 	bus = dbus.SystemBus()
     84 	manager = dbus.Interface(bus.get_object("org.bluez", "/"),
     85 							"org.bluez.Manager")
     86 
     87 	if len(sys.argv) > 1:
     88 		path = manager.FindAdapter(sys.argv[1])
     89 	else:
     90 		path = manager.DefaultAdapter()
     91 
     92 	adapter = dbus.Interface(bus.get_object("org.bluez", path),
     93 							"org.bluez.Adapter")
     94 
     95 	path = "/test/agent"
     96 	agent = Agent(bus, path)
     97 
     98 	mainloop = gobject.MainLoop()
     99 
    100 	if len(sys.argv) > 2:
    101 		if len(sys.argv) > 3:
    102 			device = adapter.FindDevice(sys.argv[2])
    103 			adapter.RemoveDevice(device)
    104 
    105 		agent.set_exit_on_release(False)
    106 		adapter.CreatePairedDevice(sys.argv[2], path, "DisplayYesNo",
    107 					reply_handler=create_device_reply,
    108 					error_handler=create_device_error)
    109 	else:
    110 		adapter.RegisterAgent(path, "DisplayYesNo")
    111 		print "Agent registered"
    112 
    113 	mainloop.run()
    114 
    115 	#adapter.UnregisterAgent(path)
    116 	#print "Agent unregistered"
    117