NewBlue D-Bus Agent API description
**********************************


Agent Manager hierarchy
=======================

Service         org.chromium.Newblue
Interface       org.bluez.AgentManager1
Object path     /org/bluez

                void RegisterAgent(object agent, string capability)

                void UnregisterAgent(object agent)

                void RequestDefaultAgent(object agent)


Agent hierarchy
===============

Service         unique name
Interface       org.bluez.Agent1
Object path     freely definable

Methods        void Release()

                string RequestPinCode(object device)

                void DisplayPinCode(object device, string pincode)

                uint32 RequestPasskey(object device)

                void DisplayPasskey(object device, uint32 passkey,
                                                                uint16 entered)

                void RequestConfirmation(object device, uint32 passkey)

                void RequestAuthorization(object device)

                void AuthorizeService(object device, string uuid)

                void Cancel()
