diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/modules/cache.rs | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/modules/cache.rs b/src/modules/cache.rs index 03dc1be..b07bbbb 100644 --- a/src/modules/cache.rs +++ b/src/modules/cache.rs @@ -52,13 +52,28 @@ impl Node for Cache { request: NodeRequest, ) -> Pin<Box<dyn Future<Output = Result<NodeResponse, ServiceError>> + Send + Sync + 'a>> { Box::pin(async move { - // totally wrong... + // not very fast let mut hasher = Sha256::new(); + hasher.update(request.method().as_str().len().to_be_bytes()); hasher.update(request.method().as_str()); + hasher.update(request.uri().path().len().to_be_bytes()); hasher.update(request.uri().path()); + hasher.update(if request.uri().query().is_some() { + [1] + } else { + [0] + }); if let Some(q) = request.uri().query() { + hasher.update(q.len().to_be_bytes()); hasher.update(q); } + hasher.update(request.headers().len().to_be_bytes()); + for (k, v) in request.headers() { + hasher.update(k.as_str().len().to_be_bytes()); + hasher.update(v.as_bytes().len().to_be_bytes()); + hasher.update(k); + hasher.update(v); + } let key: [u8; 32] = hasher.finalize().try_into().unwrap(); if let Some(resp) = self.entries.read().await.get(&key) { |