Tizen 2.0 Release
[framework/connectivity/bluez.git] / test / simple-agent
1 #!/usr/bin/python
2
3 from __future__ import absolute_import, print_function, unicode_literals
4
5 from gi.repository import GObject
6
7 import sys
8 import dbus
9 import dbus.service
10 import dbus.mainloop.glib
11 from optparse import OptionParser
12
13 def ask(prompt):
14         try:
15                 return raw_input(prompt)
16         except:
17                 return input(prompt)
18
19 class Rejected(dbus.DBusException):
20         _dbus_error_name = "org.bluez.Error.Rejected"
21
22 class Agent(dbus.service.Object):
23         exit_on_release = True
24
25         def set_exit_on_release(self, exit_on_release):
26                 self.exit_on_release = exit_on_release
27
28         @dbus.service.method("org.bluez.Agent",
29                                         in_signature="", out_signature="")
30         def Release(self):
31                 print("Release")
32                 if self.exit_on_release:
33                         mainloop.quit()
34
35         @dbus.service.method("org.bluez.Agent",
36                                         in_signature="os", out_signature="")
37         def Authorize(self, device, uuid):
38                 print("Authorize (%s, %s)" % (device, uuid))
39                 authorize = ask("Authorize connection (yes/no): ")
40                 if (authorize == "yes"):
41                         return
42                 raise Rejected("Connection rejected by user")
43
44         @dbus.service.method("org.bluez.Agent",
45                                         in_signature="o", out_signature="s")
46         def RequestPinCode(self, device):
47                 print("RequestPinCode (%s)" % (device))
48                 return ask("Enter PIN Code: ")
49
50         @dbus.service.method("org.bluez.Agent",
51                                         in_signature="o", out_signature="u")
52         def RequestPasskey(self, device):
53                 print("RequestPasskey (%s)" % (device))
54                 passkey = ask("Enter passkey: ")
55                 return dbus.UInt32(passkey)
56
57         @dbus.service.method("org.bluez.Agent",
58                                         in_signature="ou", out_signature="")
59         def DisplayPasskey(self, device, passkey):
60                 print("DisplayPasskey (%s, %06d)" % (device, passkey))
61
62         @dbus.service.method("org.bluez.Agent",
63                                         in_signature="os", out_signature="")
64         def DisplayPinCode(self, device, pincode):
65                 print("DisplayPinCode (%s, %s)" % (device, pincode))
66
67         @dbus.service.method("org.bluez.Agent",
68                                         in_signature="ou", out_signature="")
69         def RequestConfirmation(self, device, passkey):
70                 print("RequestConfirmation (%s, %06d)" % (device, passkey))
71                 confirm = ask("Confirm passkey (yes/no): ")
72                 if (confirm == "yes"):
73                         return
74                 raise Rejected("Passkey doesn't match")
75
76         @dbus.service.method("org.bluez.Agent",
77                                         in_signature="s", out_signature="")
78         def ConfirmModeChange(self, mode):
79                 print("ConfirmModeChange (%s)" % (mode))
80                 authorize = ask("Authorize mode change (yes/no): ")
81                 if (authorize == "yes"):
82                         return
83                 raise Rejected("Mode change by user")
84
85         @dbus.service.method("org.bluez.Agent",
86                                         in_signature="", out_signature="")
87         def Cancel(self):
88                 print("Cancel")
89
90 def create_device_reply(device):
91         print("New device (%s)" % (device))
92         mainloop.quit()
93
94 def create_device_error(error):
95         print("Creating device failed: %s" % (error))
96         mainloop.quit()
97
98 if __name__ == '__main__':
99         dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
100
101         bus = dbus.SystemBus()
102         manager = dbus.Interface(bus.get_object("org.bluez", "/"),
103                                                         "org.bluez.Manager")
104
105         capability = "KeyboardDisplay"
106
107         parser = OptionParser()
108         parser.add_option("-c", "--capability", action="store",
109                                         type="string", dest="capability")
110         (options, args) = parser.parse_args()
111         if options.capability:
112                 capability  = options.capability
113
114         if len(args) > 0:
115                 path = manager.FindAdapter(args[0])
116         else:
117                 path = manager.DefaultAdapter()
118
119         adapter = dbus.Interface(bus.get_object("org.bluez", path),
120                                                         "org.bluez.Adapter")
121
122         path = "/test/agent"
123         agent = Agent(bus, path)
124
125         mainloop = GObject.MainLoop()
126
127         if len(args) > 1:
128                 if len(args) > 2:
129                         device = adapter.FindDevice(args[1])
130                         adapter.RemoveDevice(device)
131
132                 agent.set_exit_on_release(False)
133                 adapter.CreatePairedDevice(args[1], path, capability,
134                                         timeout=60000,
135                                         reply_handler=create_device_reply,
136                                         error_handler=create_device_error)
137         else:
138                 adapter.RegisterAgent(path, capability)
139                 print("Agent registered")
140
141         mainloop.run()
142
143         #adapter.UnregisterAgent(path)
144         #print("Agent unregistered")