aboutsummaryrefslogtreecommitdiffstats
path: root/lib/bb/asyncrpc/serv.py
diff options
context:
space:
mode:
authorJoshua Watt <JPEWhacker@gmail.com>2024-02-22 15:31:48 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2024-02-24 16:23:17 +0000
commit1cb2b8be6cc5269553f549285592e47b7d29db03 (patch)
tree3e46c3d74d6fcbcf76f6deb02f2d95a86e41d81c /lib/bb/asyncrpc/serv.py
parent96cbe8f87209a927c157ebcf469f8b9d54fcf92e (diff)
downloadbitbake-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.py16
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: