diff options
author | Joshua Watt <JPEWhacker@gmail.com> | 2024-02-22 15:31:48 -0700 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2024-02-24 16:23:17 +0000 |
commit | 1cb2b8be6cc5269553f549285592e47b7d29db03 (patch) | |
tree | 3e46c3d74d6fcbcf76f6deb02f2d95a86e41d81c /lib/bb/asyncrpc/serv.py | |
parent | 96cbe8f87209a927c157ebcf469f8b9d54fcf92e (diff) | |
download | bitbake-1cb2b8be6cc5269553f549285592e47b7d29db03.tar.gz |
asyncrpc: Add support for server headers
Adds support for asyncrpc servers to send connection headers to clients
on connection. Since this is a breaking protocol change, clients must
opt-in to expect headers from the server, corresponding to a version
bump in the client protocol.
Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'lib/bb/asyncrpc/serv.py')
-rw-r--r-- | lib/bb/asyncrpc/serv.py | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/lib/bb/asyncrpc/serv.py b/lib/bb/asyncrpc/serv.py index f0be9a6cd..a66117aca 100644 --- a/lib/bb/asyncrpc/serv.py +++ b/lib/bb/asyncrpc/serv.py @@ -39,10 +39,14 @@ class AsyncServerConnection(object): "address": socket.address, }, ) + self.client_headers = {} async def close(self): await self.socket.close() + async def handle_headers(self, headers): + return {} + async def process_requests(self): try: self.logger.info("Client %r connected" % (self.socket.address,)) @@ -64,12 +68,20 @@ class AsyncServerConnection(object): ) return - # Read headers. Currently, no headers are implemented, so look for - # an empty line to signal the end of the headers + # Read headers + self.client_headers = {} while True: header = await self.socket.recv() if not header: + # Empty line. End of headers break + tag, value = header.split(":", 1) + self.client_headers[tag.lower()] = value.strip() + + if self.client_headers.get("needs-headers", "false") == "true": + for k, v in (await self.handle_headers(self.client_headers)).items(): + await self.socket.send("%s: %s" % (k, v)) + await self.socket.send("") # Handle messages while True: |