#!/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()