fix bug where containers are not connecting
This commit is contained in:
		
							parent
							
								
									9e9b906598
								
							
						
					
					
						commit
						7349bf16e1
					
				| @ -1,6 +1,7 @@ | |||||||
| use super::challenge::{update_server::UpdateServer, Empty, Keys, NodeUpdate}; | use super::challenge::{update_server::UpdateServer, Empty, Keys, NodeUpdate}; | ||||||
| use crate::{datastore::State, grpc::challenge::update_server::Update}; | use crate::{datastore::State, grpc::challenge::update_server::Update}; | ||||||
| use detee_sgx::RaTlsConfig; | use detee_sgx::RaTlsConfig; | ||||||
|  | use rustls::pki_types::CertificateDer; | ||||||
| use std::{pin::Pin, sync::Arc}; | use std::{pin::Pin, sync::Arc}; | ||||||
| use tokio::sync::broadcast::Sender; | use tokio::sync::broadcast::Sender; | ||||||
| use tokio_stream::{Stream, StreamExt}; | use tokio_stream::{Stream, StreamExt}; | ||||||
| @ -50,7 +51,7 @@ impl MyServer { | |||||||
|         let tls_acceptor = TlsAcceptor::from(Arc::new(tls)); |         let tls_acceptor = TlsAcceptor::from(Arc::new(tls)); | ||||||
| 
 | 
 | ||||||
|         loop { |         loop { | ||||||
|             let (conn, _addr) = match listener.accept().await { |             let (conn, addr) = match listener.accept().await { | ||||||
|                 Ok(incoming) => incoming, |                 Ok(incoming) => incoming, | ||||||
|                 Err(e) => { |                 Err(e) => { | ||||||
|                     println!("Error accepting connection: {}", e); |                     println!("Error accepting connection: {}", e); | ||||||
| @ -85,7 +86,12 @@ impl MyServer { | |||||||
|                     conn.unwrap() |                     conn.unwrap() | ||||||
|                 }; |                 }; | ||||||
| 
 | 
 | ||||||
|                 let svc = ServiceBuilder::new().service(svc); |                 let extension_layer = | ||||||
|  |                     tower_http::add_extension::AddExtensionLayer::new(Arc::new(ConnInfo { | ||||||
|  |                         addr, | ||||||
|  |                         certificates, | ||||||
|  |                     })); | ||||||
|  |                 let svc = ServiceBuilder::new().layer(extension_layer).service(svc); | ||||||
| 
 | 
 | ||||||
|                 if let Err(e) = http |                 if let Err(e) = http | ||||||
|                     .serve_connection( |                     .serve_connection( | ||||||
| @ -103,6 +109,12 @@ impl MyServer { | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | #[derive(Debug)] | ||||||
|  | struct ConnInfo { | ||||||
|  |     addr: std::net::SocketAddr, | ||||||
|  |     certificates: Vec<CertificateDer<'static>>, | ||||||
|  | } | ||||||
|  | 
 | ||||||
| #[tonic::async_trait] | #[tonic::async_trait] | ||||||
| impl Update for MyServer { | impl Update for MyServer { | ||||||
|     type GetUpdatesStream = Pin<Box<dyn Stream<Item = Result<NodeUpdate, Status>> + Send>>; |     type GetUpdatesStream = Pin<Box<dyn Stream<Item = Result<NodeUpdate, Status>> + Send>>; | ||||||
| @ -115,8 +127,9 @@ impl Update for MyServer { | |||||||
|         &self, |         &self, | ||||||
|         req: Request<Streaming<NodeUpdate>>, |         req: Request<Streaming<NodeUpdate>>, | ||||||
|     ) -> Result<Response<Self::GetUpdatesStream>, Status> { |     ) -> Result<Response<Self::GetUpdatesStream>, Status> { | ||||||
|  |         let conn_info = req.extensions().get::<Arc<ConnInfo>>().unwrap(); | ||||||
|         self.state.increase_mratls_conns(); |         self.state.increase_mratls_conns(); | ||||||
|         let remote_ip = req.remote_addr().unwrap().ip().to_string(); |         let remote_ip = conn_info.addr.ip().to_string(); | ||||||
|         let tx = self.tx.clone(); |         let tx = self.tx.clone(); | ||||||
|         let mut rx = self.tx.subscribe(); |         let mut rx = self.tx.subscribe(); | ||||||
|         let mut inbound = req.into_inner(); |         let mut inbound = req.into_inner(); | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user