~bluetooth/bluez/vivid-phone-overlay

« back to all changes in this revision

Viewing changes to .pc/ssp_parameter.patch/test/simple-agent

  • Committer: Simon Fels
  • Date: 2015-09-11 09:01:46 UTC
  • Revision ID: morphis@gravedo.de-20150911090146-4c0ln9s7ec3xf0nx
Import package bluez_4.101-0ubuntu25.1~overlay4 from stable phone overlay PPA

Show diffs side-by-side

added added

removed removed

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