rest-server: use hypers AddrIncoming for proxmox-backup-api
this has a 'from_listener' (tokio::net::TcpListener) since hyper 0.14.5 in the 'tcp' feature (we use 'full', which includes that; since 0.14.13 it is not behind a feature flag anymore). this makes it possible to create a hyper server without our 'StaticIncoming' wrapper and thus makes it unnecessary. The only other thing we have to do is to change the Service impl from tokio::net::TcpStream to hyper::server::conn::AddStream to fulfill the trait requirements. Signed-off-by: Dominik Csapak <d.csapak@proxmox.com> Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
		
				
					committed by
					
						 Thomas Lamprecht
						Thomas Lamprecht
					
				
			
			
				
	
			
			
			
						parent
						
							99940358e3
						
					
				
				
					commit
					6f0565fa60
				
			| @ -10,7 +10,7 @@ anyhow = "1.0" | |||||||
| futures = "0.3" | futures = "0.3" | ||||||
| handlebars = "3.0" | handlebars = "3.0" | ||||||
| http = "0.2" | http = "0.2" | ||||||
| hyper = { version = "0.14", features = [ "full" ] } | hyper = { version = "0.14.5", features = [ "full" ] } | ||||||
| lazy_static = "1.4" | lazy_static = "1.4" | ||||||
| libc = "0.2" | libc = "0.2" | ||||||
| log = "0.4" | log = "0.4" | ||||||
|  | |||||||
| @ -93,7 +93,7 @@ impl tower_service::Service<&Pin<Box<tokio_openssl::SslStream<tokio::net::TcpStr | |||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| impl tower_service::Service<&tokio::net::TcpStream> for RestServer { | impl tower_service::Service<&hyper::server::conn::AddrStream> for RestServer { | ||||||
|     type Response = ApiService; |     type Response = ApiService; | ||||||
|     type Error = Error; |     type Error = Error; | ||||||
|     type Future = Pin<Box<dyn Future<Output = Result<ApiService, Error>> + Send>>; |     type Future = Pin<Box<dyn Future<Output = Result<ApiService, Error>> + Send>>; | ||||||
| @ -102,15 +102,13 @@ impl tower_service::Service<&tokio::net::TcpStream> for RestServer { | |||||||
|         Poll::Ready(Ok(())) |         Poll::Ready(Ok(())) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     fn call(&mut self, ctx: &tokio::net::TcpStream) -> Self::Future { |     fn call(&mut self, ctx: &hyper::server::conn::AddrStream) -> Self::Future { | ||||||
|         match ctx.peer_addr() { |         let peer =  ctx.remote_addr(); | ||||||
|             Err(err) => future::err(format_err!("unable to get peer address - {}", err)).boxed(), |         future::ok(ApiService { | ||||||
|             Ok(peer) => future::ok(ApiService { |  | ||||||
|             peer, |             peer, | ||||||
|             api_config: self.api_config.clone(), |             api_config: self.api_config.clone(), | ||||||
|         }) |         }) | ||||||
|             .boxed(), |         .boxed() | ||||||
|         } |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | |||||||
| @ -108,7 +108,8 @@ async fn run() -> Result<(), Error> { | |||||||
|     let server = daemon::create_daemon( |     let server = daemon::create_daemon( | ||||||
|         ([127,0,0,1], 82).into(), |         ([127,0,0,1], 82).into(), | ||||||
|         move |listener, ready| { |         move |listener, ready| { | ||||||
|             let incoming = proxmox_backup::tools::async_io::StaticIncoming::from(listener); |             let incoming = hyper::server::conn::AddrIncoming::from_listener(listener)?; | ||||||
|  |  | ||||||
|             Ok(ready |             Ok(ready | ||||||
|                 .and_then(|_| hyper::Server::builder(incoming) |                 .and_then(|_| hyper::Server::builder(incoming) | ||||||
|                     .serve(rest_server) |                     .serve(rest_server) | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user