diff options
Diffstat (limited to 'bitbake/lib/bb/asyncrpc/client.py')
-rw-r--r-- | bitbake/lib/bb/asyncrpc/client.py | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/bitbake/lib/bb/asyncrpc/client.py b/bitbake/lib/bb/asyncrpc/client.py index a6228bb0ba..29a5ab76aa 100644 --- a/bitbake/lib/bb/asyncrpc/client.py +++ b/bitbake/lib/bb/asyncrpc/client.py | |||
@@ -17,13 +17,24 @@ from .exceptions import ConnectionClosedError, InvokeError | |||
17 | 17 | ||
18 | 18 | ||
19 | class AsyncClient(object): | 19 | class AsyncClient(object): |
20 | def __init__(self, proto_name, proto_version, logger, timeout=30): | 20 | def __init__( |
21 | self, | ||
22 | proto_name, | ||
23 | proto_version, | ||
24 | logger, | ||
25 | timeout=30, | ||
26 | server_headers=False, | ||
27 | headers={}, | ||
28 | ): | ||
21 | self.socket = None | 29 | self.socket = None |
22 | self.max_chunk = DEFAULT_MAX_CHUNK | 30 | self.max_chunk = DEFAULT_MAX_CHUNK |
23 | self.proto_name = proto_name | 31 | self.proto_name = proto_name |
24 | self.proto_version = proto_version | 32 | self.proto_version = proto_version |
25 | self.logger = logger | 33 | self.logger = logger |
26 | self.timeout = timeout | 34 | self.timeout = timeout |
35 | self.needs_server_headers = server_headers | ||
36 | self.server_headers = {} | ||
37 | self.headers = headers | ||
27 | 38 | ||
28 | async def connect_tcp(self, address, port): | 39 | async def connect_tcp(self, address, port): |
29 | async def connect_sock(): | 40 | async def connect_sock(): |
@@ -61,9 +72,29 @@ class AsyncClient(object): | |||
61 | async def setup_connection(self): | 72 | async def setup_connection(self): |
62 | # Send headers | 73 | # Send headers |
63 | await self.socket.send("%s %s" % (self.proto_name, self.proto_version)) | 74 | await self.socket.send("%s %s" % (self.proto_name, self.proto_version)) |
75 | await self.socket.send( | ||
76 | "needs-headers: %s" % ("true" if self.needs_server_headers else "false") | ||
77 | ) | ||
78 | for k, v in self.headers.items(): | ||
79 | await self.socket.send("%s: %s" % (k, v)) | ||
80 | |||
64 | # End of headers | 81 | # End of headers |
65 | await self.socket.send("") | 82 | await self.socket.send("") |
66 | 83 | ||
84 | self.server_headers = {} | ||
85 | if self.needs_server_headers: | ||
86 | while True: | ||
87 | line = await self.socket.recv() | ||
88 | if not line: | ||
89 | # End headers | ||
90 | break | ||
91 | tag, value = line.split(":", 1) | ||
92 | self.server_headers[tag.lower()] = value.strip() | ||
93 | |||
94 | async def get_header(self, tag, default): | ||
95 | await self.connect() | ||
96 | return self.server_headers.get(tag, default) | ||
97 | |||
67 | async def connect(self): | 98 | async def connect(self): |
68 | if self.socket is None: | 99 | if self.socket is None: |
69 | self.socket = await self._connect_sock() | 100 | self.socket = await self._connect_sock() |