88 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/python
 | |
| 
 | |
| from __future__ import absolute_import, print_function, unicode_literals
 | |
| 
 | |
| import sys
 | |
| import dbus
 | |
| import dbus.service
 | |
| import dbus.mainloop.glib
 | |
| try:
 | |
|   from gi.repository import GObject
 | |
| except ImportError:
 | |
|   import gobject as GObject
 | |
| 
 | |
| BUS_NAME = 'org.bluez.obex'
 | |
| PATH = '/org/bluez/obex'
 | |
| AGENT_MANAGER_INTERFACE = 'org.bluez.obex.AgentManager1'
 | |
| AGENT_INTERFACE = 'org.bluez.obex.Agent1'
 | |
| TRANSFER_INTERFACE = 'org.bluez.obex.Transfer1'
 | |
| 
 | |
| def ask(prompt):
 | |
| 	try:
 | |
| 		return raw_input(prompt)
 | |
| 	except:
 | |
| 		return input(prompt)
 | |
| 
 | |
| class Agent(dbus.service.Object):
 | |
| 	def __init__(self, conn=None, obj_path=None):
 | |
| 		dbus.service.Object.__init__(self, conn, obj_path)
 | |
| 		self.pending_auth = False
 | |
| 
 | |
| 	@dbus.service.method(AGENT_INTERFACE, in_signature="o",
 | |
| 							out_signature="s")
 | |
| 	def AuthorizePush(self, path):
 | |
| 		transfer = dbus.Interface(bus.get_object(BUS_NAME, path),
 | |
| 					'org.freedesktop.DBus.Properties')
 | |
| 		properties = transfer.GetAll(TRANSFER_INTERFACE);
 | |
| 
 | |
| 		self.pending_auth = True
 | |
| 		auth = ask("Authorize (%s, %s) (Y/n):" % (path,
 | |
| 							properties['Name']))
 | |
| 
 | |
| 		if auth == "n" or auth == "N":
 | |
| 			self.pending_auth = False
 | |
| 			raise dbus.DBusException(
 | |
| 					"org.bluez.obex.Error.Rejected: "
 | |
| 					"Not Authorized")
 | |
| 
 | |
| 		self.pending_auth = False
 | |
| 
 | |
| 		return properties['Name']
 | |
| 
 | |
| 	@dbus.service.method(AGENT_INTERFACE, in_signature="",
 | |
| 							out_signature="")
 | |
| 	def Cancel(self):
 | |
| 		print("Authorization Canceled")
 | |
| 		self.pending_auth = False
 | |
| 
 | |
| if __name__ == '__main__':
 | |
| 	dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
 | |
| 
 | |
| 	bus = dbus.SessionBus()
 | |
| 	manager = dbus.Interface(bus.get_object(BUS_NAME, PATH),
 | |
| 						AGENT_MANAGER_INTERFACE)
 | |
| 
 | |
| 	path = "/test/agent"
 | |
| 	agent = Agent(bus, path)
 | |
| 
 | |
| 	mainloop = GObject.MainLoop()
 | |
| 
 | |
| 	manager.RegisterAgent(path)
 | |
| 	print("Agent registered")
 | |
| 
 | |
| 	cont = True
 | |
| 	while cont:
 | |
| 		try:
 | |
| 			mainloop.run()
 | |
| 		except KeyboardInterrupt:
 | |
| 			if agent.pending_auth:
 | |
| 				agent.Cancel()
 | |
| 			elif len(transfers) > 0:
 | |
| 				for a in transfers:
 | |
| 					a.cancel()
 | |
| 			else:
 | |
| 				cont = False
 | |
| 
 | |
| 	# manager.UnregisterAgent(path)
 | |
| 	# print "Agent unregistered"
 | 
