Skip to main content

miden_node_utils/grpc/
connect_info.rs

1use tonic::service::Interceptor;
2use tonic::{Request, Status};
3
4// Extracts the IP for connection management and rate-limiting requests, called `Governor`.
5#[derive(Debug, Clone)]
6pub struct ConnectInfoInterceptor;
7
8impl Interceptor for ConnectInfoInterceptor {
9    fn call(&mut self, mut request: Request<()>) -> Result<Request<()>, Status> {
10        let addr = request
11            .remote_addr()
12            .ok_or_else(|| Status::failed_precondition("Expected TCP connection"))?;
13        request
14            .metadata_mut()
15            .insert("forwarded", format!("for={addr}").try_into().unwrap());
16        Ok(request)
17    }
18}