summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/hashserv/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/hashserv/__init__.py')
-rw-r--r--bitbake/lib/hashserv/__init__.py13
1 files changed, 13 insertions, 0 deletions
diff --git a/bitbake/lib/hashserv/__init__.py b/bitbake/lib/hashserv/__init__.py
index 3a4018353f..56b9c6bc82 100644
--- a/bitbake/lib/hashserv/__init__.py
+++ b/bitbake/lib/hashserv/__init__.py
@@ -9,11 +9,15 @@ import re
9import sqlite3 9import sqlite3
10import itertools 10import itertools
11import json 11import json
12from urllib.parse import urlparse
12 13
13UNIX_PREFIX = "unix://" 14UNIX_PREFIX = "unix://"
15WS_PREFIX = "ws://"
16WSS_PREFIX = "wss://"
14 17
15ADDR_TYPE_UNIX = 0 18ADDR_TYPE_UNIX = 0
16ADDR_TYPE_TCP = 1 19ADDR_TYPE_TCP = 1
20ADDR_TYPE_WS = 2
17 21
18UNIHASH_TABLE_DEFINITION = ( 22UNIHASH_TABLE_DEFINITION = (
19 ("method", "TEXT NOT NULL", "UNIQUE"), 23 ("method", "TEXT NOT NULL", "UNIQUE"),
@@ -84,6 +88,8 @@ def setup_database(database, sync=True):
84def parse_address(addr): 88def parse_address(addr):
85 if addr.startswith(UNIX_PREFIX): 89 if addr.startswith(UNIX_PREFIX):
86 return (ADDR_TYPE_UNIX, (addr[len(UNIX_PREFIX):],)) 90 return (ADDR_TYPE_UNIX, (addr[len(UNIX_PREFIX):],))
91 elif addr.startswith(WS_PREFIX) or addr.startswith(WSS_PREFIX):
92 return (ADDR_TYPE_WS, (addr,))
87 else: 93 else:
88 m = re.match(r'\[(?P<host>[^\]]*)\]:(?P<port>\d+)$', addr) 94 m = re.match(r'\[(?P<host>[^\]]*)\]:(?P<port>\d+)$', addr)
89 if m is not None: 95 if m is not None:
@@ -103,6 +109,9 @@ def create_server(addr, dbname, *, sync=True, upstream=None, read_only=False):
103 (typ, a) = parse_address(addr) 109 (typ, a) = parse_address(addr)
104 if typ == ADDR_TYPE_UNIX: 110 if typ == ADDR_TYPE_UNIX:
105 s.start_unix_server(*a) 111 s.start_unix_server(*a)
112 elif typ == ADDR_TYPE_WS:
113 url = urlparse(a[0])
114 s.start_websocket_server(url.hostname, url.port)
106 else: 115 else:
107 s.start_tcp_server(*a) 116 s.start_tcp_server(*a)
108 117
@@ -116,6 +125,8 @@ def create_client(addr):
116 (typ, a) = parse_address(addr) 125 (typ, a) = parse_address(addr)
117 if typ == ADDR_TYPE_UNIX: 126 if typ == ADDR_TYPE_UNIX:
118 c.connect_unix(*a) 127 c.connect_unix(*a)
128 elif typ == ADDR_TYPE_WS:
129 c.connect_websocket(*a)
119 else: 130 else:
120 c.connect_tcp(*a) 131 c.connect_tcp(*a)
121 132
@@ -128,6 +139,8 @@ async def create_async_client(addr):
128 (typ, a) = parse_address(addr) 139 (typ, a) = parse_address(addr)
129 if typ == ADDR_TYPE_UNIX: 140 if typ == ADDR_TYPE_UNIX:
130 await c.connect_unix(*a) 141 await c.connect_unix(*a)
142 elif typ == ADDR_TYPE_WS:
143 await c.connect_websocket(*a)
131 else: 144 else:
132 await c.connect_tcp(*a) 145 await c.connect_tcp(*a)
133 146