Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(279)

Side by Side Diff: tools/web_bluetooth/compact_blacklist.py

Issue 2285663002: bluetooth: Added script for converting the Web Bluetooth blacklist. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed nits and added OWNERS file. Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « tools/web_bluetooth/OWNERS ('k') | tools/web_bluetooth/compact_blacklist_unittest.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 #!/usr/bin/env python
2 # Copyright 2016 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5
6 """Script for converting the Web Bluetooth GATT blacklist into the format
7 expected by ContentBrowserClient#GetWebBluetoothBlacklist.
8
9 See:
10 https://github.com/WebBluetoothCG/registries/blob/master/gatt_blacklist.txt
11 content/public/browser/content_browser_client.h
12
13 Usage:
14 compact_blacklist.py <gatt_blacklist.txt>
15 """
16
17 import collections
18 import string
19 import sys
20
21 UUID_LENGTH = 36
22 UUID_BASE_POSTFIX = '-0000-1000-8000-00805f9b34fb'
23
24
25 class BadLineException(Exception):
26 pass
27
28
29 class InvalidUUIDException(Exception):
30 pass
31
32
33 class DuplicateUUIDException(Exception):
34 pass
35
36
37 class InvalidExclusionException(Exception):
38 pass
39
40
41 def ValidUUID(uuid):
42 if len(uuid) != UUID_LENGTH:
43 return False
44 for i in range(UUID_LENGTH):
45 if i in [8, 13, 18, 23]:
46 if uuid[i] != '-':
47 return False
48 else:
49 if uuid[i] not in string.hexdigits:
50 return False
51 return True
52
53
54
55
56 def ShortenUUID(uuid):
57 """Shorten a UUUD that use Bluetooth base UUID.
58
59 Note: this function shortens all UUIDs that use the Bluetooth base
60 UUID even though the specification states that only an assigned UUID
61 can be shortened. In this case it works fine, since the constructor in
62 bluetooth_uuid.cc also works the same way.
63 """
64
65 if uuid[8:] == UUID_BASE_POSTFIX:
66 new_uuid = '%x' % int(uuid[:8], 16)
67 if len(new_uuid) in [4, 8]:
68 uuid = new_uuid
69 return uuid
70
71
72 def Process(line, blacklist):
73 line = line.strip().lower()
74 if not line or line.startswith('#'):
75 return
76 fields = line.split()
77 if len(fields) not in [1, 2]:
78 raise BadLineException('Badly formatted line: %s' % line)
79 uuid = fields[0]
80 if not ValidUUID(uuid):
81 raise InvalidUUIDException('Invalid UUID: %s' % line)
82 uuid = ShortenUUID(uuid)
83 if uuid in blacklist:
84 raise DuplicateUUIDException('Duplicate UUID: %s' % line)
85 if len(fields) == 1:
86 blacklist[uuid] = 'e'
87 elif fields[1] == 'exclude-writes':
88 blacklist[uuid] = 'w'
89 elif fields[1] == 'exclude-reads':
90 blacklist[uuid] = 'r'
91 else:
92 raise InvalidExclusionException('Invalid exclusion value: %s' % line)
93
94
95 def main():
96 if len(sys.argv) != 2:
97 print('Usage: %s <gatt_blacklist.txt>' % sys.argv[0])
98 return 1
99
100 try:
101 blacklist = collections.OrderedDict()
102 with open(sys.argv[1]) as f:
103 for line in f:
104 Process(line, blacklist)
105 print(','.join('%s:%s' % (uuid, blacklist[uuid]) for uuid in blacklist))
106 return 0
107 except Exception as e:
108 print('Failed to compact blacklist. %s' % e)
109 return 1
110
111
112 if __name__ == '__main__':
113 sys.exit(main())
OLDNEW
« no previous file with comments | « tools/web_bluetooth/OWNERS ('k') | tools/web_bluetooth/compact_blacklist_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698