Skip to content

Commit

Permalink
feat: Move Request server util method to RequestExt
Browse files Browse the repository at this point in the history
  • Loading branch information
tottoto committed Jul 6, 2024
1 parent 4dda0a9 commit 5e35c04
Show file tree
Hide file tree
Showing 24 changed files with 160 additions and 91 deletions.
5 changes: 4 additions & 1 deletion examples/src/autoreload/server.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
use tonic::{transport::Server, Request, Response, Status};
use tonic::{
transport::{RequestExt, Server},
Request, Response, Status,
};

use hello_world::greeter_server::{Greeter, GreeterServer};
use hello_world::{HelloReply, HelloRequest};
Expand Down
5 changes: 4 additions & 1 deletion examples/src/cancellation/server.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
use std::future::Future;

use tokio_util::sync::CancellationToken;
use tonic::{transport::Server, Request, Response, Status};
use tonic::{
transport::{RequestExt, Server},
Request, Response, Status,
};

use hello_world::greeter_server::{Greeter, GreeterServer};
use hello_world::{HelloReply, HelloRequest};
Expand Down
5 changes: 4 additions & 1 deletion examples/src/codec_buffers/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,10 @@
//! The generated code assumes that a module `crate::common` exists which defines
//! `SmallBufferCodec`, and `SmallBufferCodec` must have a Default implementation.

use tonic::{transport::Server, Request, Response, Status};
use tonic::{
transport::{RequestExt, Server},
Request, Response, Status,
};

pub mod common;

Expand Down
5 changes: 4 additions & 1 deletion examples/src/compression/server.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
use tonic::{transport::Server, Request, Response, Status};
use tonic::{
transport::{RequestExt, Server},
Request, Response, Status,
};

use hello_world::greeter_server::{Greeter, GreeterServer};
use hello_world::{HelloReply, HelloRequest};
Expand Down
6 changes: 5 additions & 1 deletion examples/src/dynamic/server.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
use std::env;
use tonic::{transport::server::RoutesBuilder, transport::Server, Request, Response, Status};
use tonic::{
transport::server::RoutesBuilder,
transport::{RequestExt, Server},
Request, Response, Status,
};

use hello_world::greeter_server::{Greeter, GreeterServer};
use hello_world::{HelloReply, HelloRequest};
Expand Down
5 changes: 4 additions & 1 deletion examples/src/grpc-web/server.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
use tonic::{transport::Server, Request, Response, Status};
use tonic::{
transport::{RequestExt, Server},
Request, Response, Status,
};

use hello_world::greeter_server::{Greeter, GreeterServer};
use hello_world::{HelloReply, HelloRequest};
Expand Down
2 changes: 1 addition & 1 deletion examples/src/h2c/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use hyper_util::rt::{TokioExecutor, TokioIo};
use hyper_util::server::conn::auto::Builder;
use hyper_util::service::TowerToHyperService;
use tokio::net::TcpListener;
use tonic::{service::Routes, Request, Response, Status};
use tonic::{service::Routes, transport::RequestExt, Request, Response, Status};

use hello_world::greeter_server::{Greeter, GreeterServer};
use hello_world::{HelloReply, HelloRequest};
Expand Down
5 changes: 4 additions & 1 deletion examples/src/health/server.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
use tonic::{transport::Server, Request, Response, Status};
use tonic::{
transport::{RequestExt, Server},
Request, Response, Status,
};

use hello_world::greeter_server::{Greeter, GreeterServer};
use hello_world::{HelloReply, HelloRequest};
Expand Down
5 changes: 4 additions & 1 deletion examples/src/helloworld/server.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
use tonic::{transport::Server, Request, Response, Status};
use tonic::{
transport::{RequestExt, Server},
Request, Response, Status,
};

use hello_world::greeter_server::{Greeter, GreeterServer};
use hello_world::{HelloReply, HelloRequest};
Expand Down
5 changes: 4 additions & 1 deletion examples/src/json-codec/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@
//! in the `examples/build.rs` file. As defined there, the generated code assumes that a module
//! `crate::common` exists which defines `HelloRequest`, `HelloResponse`, and `JsonCodec`.

use tonic::{transport::Server, Request, Response, Status};
use tonic::{
transport::{RequestExt, Server},
Request, Response, Status,
};

pub mod common;
use common::{HelloRequest, HelloResponse};
Expand Down
5 changes: 4 additions & 1 deletion examples/src/optional/server.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
use std::env;
use tonic::{transport::Server, Request, Response, Status};
use tonic::{
transport::{RequestExt, Server},
Request, Response, Status,
};

use hello_world::greeter_server::{Greeter, GreeterServer};
use hello_world::{HelloReply, HelloRequest};
Expand Down
2 changes: 1 addition & 1 deletion examples/src/reflection/server.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use tonic::transport::Server;
use tonic::transport::{RequestExt, Server};
use tonic::{Request, Response, Status};

mod proto {
Expand Down
5 changes: 4 additions & 1 deletion examples/src/richer-error/server.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
use tonic::{transport::Server, Code, Request, Response, Status};
use tonic::{
transport::{server::RequestExt, Server},
Code, Request, Response, Status,
};
use tonic_types::{ErrorDetails, StatusExt};

use hello_world::greeter_server::{Greeter, GreeterServer};
Expand Down
5 changes: 4 additions & 1 deletion examples/src/richer-error/server_vec.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
use tonic::{transport::Server, Code, Request, Response, Status};
use tonic::{
transport::{RequestExt, Server},
Code, Request, Response, Status,
};
use tonic_types::{BadRequest, Help, LocalizedMessage, StatusExt};

use hello_world::greeter_server::{Greeter, GreeterServer};
Expand Down
5 changes: 4 additions & 1 deletion examples/src/streaming/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,10 @@ pub mod pb {
use std::{error::Error, io::ErrorKind, net::ToSocketAddrs, pin::Pin, time::Duration};
use tokio::sync::mpsc;
use tokio_stream::{wrappers::ReceiverStream, Stream, StreamExt};
use tonic::{transport::Server, Request, Response, Status, Streaming};
use tonic::{
transport::{RequestExt, Server},
Request, Response, Status, Streaming,
};

use pb::{EchoRequest, EchoResponse};

Expand Down
5 changes: 4 additions & 1 deletion examples/src/timeout/server.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
use std::time::Duration;
use tokio::time::sleep;
use tonic::{transport::Server, Request, Response, Status};
use tonic::{
transport::{RequestExt, Server},
Request, Response, Status,
};

use hello_world::greeter_server::{Greeter, GreeterServer};
use hello_world::{HelloReply, HelloRequest};
Expand Down
2 changes: 1 addition & 1 deletion examples/src/tls/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use pb::{EchoRequest, EchoResponse};
use tonic::{
transport::{
server::{TcpConnectInfo, TlsConnectInfo},
Identity, Server, ServerTlsConfig,
Identity, RequestExt, Server, ServerTlsConfig,
},
Request, Response, Status,
};
Expand Down
2 changes: 1 addition & 1 deletion examples/src/tls_client_auth/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ pub mod pb {
}

use pb::{EchoRequest, EchoResponse};
use tonic::transport::{Certificate, Identity, Server, ServerTlsConfig};
use tonic::transport::{Certificate, Identity, RequestExt, Server, ServerTlsConfig};
use tonic::{Request, Response, Status};

type EchoResult<T> = Result<Response<T>, Status>;
Expand Down
6 changes: 5 additions & 1 deletion examples/src/tower/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,11 @@ use std::{
task::{Context, Poll},
time::Duration,
};
use tonic::{body::BoxBody, transport::Server, Request, Response, Status};
use tonic::{
body::BoxBody,
transport::{RequestExt, Server},
Request, Response, Status,
};
use tower::{Layer, Service};

use hello_world::greeter_server::{Greeter, GreeterServer};
Expand Down
4 changes: 2 additions & 2 deletions tests/integration_tests/tests/connect_info.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use integration_tests::pb::{test_client, test_server, Input, Output};
use std::time::Duration;
use tokio::sync::oneshot;
use tonic::{
transport::{server::TcpConnectInfo, Endpoint, Server},
transport::{server::TcpConnectInfo, Endpoint, RequestExt, Server},
Request, Response, Status,
};

Expand Down Expand Up @@ -60,7 +60,7 @@ pub mod unix {
};
use tokio_stream::wrappers::UnixListenerStream;
use tonic::{
transport::{server::UdsConnectInfo, Endpoint, Server, Uri},
transport::{server::UdsConnectInfo, Endpoint, RequestExt, Server, Uri},
Request, Response, Status,
};
use tower::service_fn;
Expand Down
73 changes: 4 additions & 69 deletions tonic/src/request.rs
Original file line number Diff line number Diff line change
@@ -1,18 +1,10 @@
use crate::metadata::{MetadataMap, MetadataValue};
#[cfg(feature = "server")]
use crate::transport::server::TcpConnectInfo;
#[cfg(all(feature = "server", feature = "tls"))]
use crate::transport::server::TlsConnectInfo;
use http::Extensions;
#[cfg(feature = "server")]
use std::net::SocketAddr;
#[cfg(all(feature = "server", feature = "tls"))]
use std::sync::Arc;
use std::time::Duration;
#[cfg(all(feature = "server", feature = "tls"))]
use tokio_rustls::rustls::pki_types::CertificateDer;

use http::Extensions;
use tokio_stream::Stream;

use crate::metadata::{MetadataMap, MetadataValue};

/// A gRPC request and metadata from an RPC call.
#[derive(Debug)]
pub struct Request<T> {
Expand Down Expand Up @@ -206,63 +198,6 @@ impl<T> Request<T> {
}
}

/// Get the local address of this connection.
///
/// This will return `None` if the `IO` type used
/// does not implement `Connected` or when using a unix domain socket.
/// This currently only works on the server side.
#[cfg(feature = "server")]
pub fn local_addr(&self) -> Option<SocketAddr> {
let addr = self
.extensions()
.get::<TcpConnectInfo>()
.and_then(|i| i.local_addr());

#[cfg(feature = "tls")]
let addr = addr.or_else(|| {
self.extensions()
.get::<TlsConnectInfo<TcpConnectInfo>>()
.and_then(|i| i.get_ref().local_addr())
});

addr
}

/// Get the remote address of this connection.
///
/// This will return `None` if the `IO` type used
/// does not implement `Connected` or when using a unix domain socket.
/// This currently only works on the server side.
#[cfg(feature = "server")]
pub fn remote_addr(&self) -> Option<SocketAddr> {
let addr = self
.extensions()
.get::<TcpConnectInfo>()
.and_then(|i| i.remote_addr());

#[cfg(feature = "tls")]
let addr = addr.or_else(|| {
self.extensions()
.get::<TlsConnectInfo<TcpConnectInfo>>()
.and_then(|i| i.get_ref().remote_addr())
});

addr
}

/// Get the peer certificates of the connected client.
///
/// This is used to fetch the certificates from the TLS session
/// and is mostly used for mTLS. This currently only returns
/// `Some` on the server side of the `transport` server with
/// TLS enabled connections.
#[cfg(all(feature = "server", feature = "tls"))]
pub fn peer_certs(&self) -> Option<Arc<Vec<CertificateDer<'static>>>> {
self.extensions()
.get::<TlsConnectInfo<TcpConnectInfo>>()
.and_then(|i| i.peer_certs())
}

/// Set the max duration the request is allowed to take.
///
/// Requires the server to support the `grpc-timeout` metadata, which Tonic does.
Expand Down
2 changes: 1 addition & 1 deletion tonic/src/transport/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ pub use self::channel::{Channel, Endpoint};
pub use self::error::Error;
#[doc(inline)]
#[cfg(feature = "server")]
pub use self::server::Server;
pub use self::server::{RequestExt, Server};
#[doc(inline)]
pub use self::service::grpc_timeout::TimeoutExpired;

Expand Down
3 changes: 3 additions & 0 deletions tonic/src/transport/server/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

mod conn;
mod incoming;
mod request_ext;
mod service;
#[cfg(feature = "tls")]
mod tls;
Expand All @@ -25,6 +26,8 @@ pub use tls::ServerTlsConfig;
#[cfg(feature = "tls")]
pub use conn::TlsConnectInfo;

pub use self::request_ext::RequestExt;

#[cfg(feature = "tls")]
use self::service::TlsAcceptor;

Expand Down
Loading

0 comments on commit 5e35c04

Please sign in to comment.