#!/usr/bin/python

import gobject

import dbus.mainloop.glib

def create_device_reply(device):
	print "Pairing succeed!"
	mainloop.quit()

def create_device_error(error):
	print "Pairing failed."
	mainloop.quit()

if __name__ == '__main__':
	dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)

	mainloop = gobject.MainLoop()

	bus = dbus.SystemBus()
	manager = dbus.Interface(bus.get_object("org.bluez", "/"),
							"org.bluez.Manager")

	adapter0_path = manager.FindAdapter("hci0")
	adapter1_path = manager.FindAdapter("hci1")

	adapter0 = dbus.Interface(bus.get_object("org.bluez", adapter0_path),
							"org.bluez.Adapter")
	adapter1 = dbus.Interface(bus.get_object("org.bluez", adapter1_path),
							"org.bluez.Adapter")

	adapter0_address = adapter0.GetProperties()["Address"]
	adapter1_address = adapter1.GetProperties()["Address"]
	print "Adapters:"
	print "    hci0: " + adapter0_address
	print "    hci1: " + adapter1_address
	print

	print "Removing any existing bond..."

	try:
		device = adapter0.FindDevice(adapter1_address)
		adapter0.RemoveDevice(device)
	except:
		pass

	try:
		device = adapter1.FindDevice(adapter0_address)
		adapter1.RemoveDevice(device)
	except:
		pass

	print "Done."
	print
	print "Reading local Out of Band data..."

	oob_adapter0 = dbus.Interface(bus.get_object("org.bluez",
					adapter0_path), "org.bluez.OutOfBand")
	oob_adapter1 = dbus.Interface(bus.get_object("org.bluez",
					adapter1_path), "org.bluez.OutOfBand")

	oob0 = oob_adapter0.ReadLocalData()
	oob1 = oob_adapter1.ReadLocalData()

	print "Done."
	print
	print "Exchanging Out of Band data..."

	oob_adapter0.AddRemoteData(adapter1_address, oob1[0], oob1[1])
	oob_adapter1.AddRemoteData(adapter0_address, oob0[0], oob0[1])

	print "Done."
	print
	print "Starting to pair."
	adapter1.CreatePairedDevice(adapter0_address, "/test/agent_oob",
					"DisplayYesNo",
					reply_handler=create_device_reply,
					error_handler=create_device_error)

	mainloop.run()
