diff --git a/TODO.md b/TODO.md
index abd51de..ad4f6b2 100644
--- a/TODO.md
+++ b/TODO.md
@@ -2,6 +2,7 @@
- [Done in 0.6.0] ~~Fix strategy for `h2c` requests on forwarded requests upstream. This needs to update forwarder definition. Also, maybe forwarder would have a cache corresponding to the following task.~~
- [Try in v0.6.0] **Cache option for the response with `Cache-Control: public` header directive ([#55](https://github.com/junkurihara/rust-rpxy/issues/55))**
+- Fix dynamic reloading of configuration file
- Improvement of path matcher
- More flexible option for rewriting path
- Refactoring
diff --git a/rpxy-bin/Cargo.toml b/rpxy-bin/Cargo.toml
index e11df63..65fe24d 100644
--- a/rpxy-bin/Cargo.toml
+++ b/rpxy-bin/Cargo.toml
@@ -46,7 +46,7 @@ tracing-subscriber = { version = "0.3.17", features = ["env-filter"] }
[target.'cfg(not(target_env = "msvc"))'.dependencies]
-tikv-jemallocator = "0.5.0"
+tikv-jemallocator = "0.5.4"
[dev-dependencies]
diff --git a/rpxy-lib/src/handler/handler_main.rs b/rpxy-lib/src/handler/handler_main.rs
index 98d563b..fb83d69 100644
--- a/rpxy-lib/src/handler/handler_main.rs
+++ b/rpxy-lib/src/handler/handler_main.rs
@@ -50,7 +50,7 @@ where
/// Handle incoming request message from a client
pub async fn handle_request(
- self,
+ &self,
mut req: Request
,
client_addr: SocketAddr, // アクセス制御用
listen_addr: SocketAddr,
diff --git a/rpxy-lib/src/lib.rs b/rpxy-lib/src/lib.rs
index c2b8f0e..5369cc2 100644
--- a/rpxy-lib/src/lib.rs
+++ b/rpxy-lib/src/lib.rs
@@ -69,10 +69,12 @@ where
});
// TODO: HTTP2 only client is needed for http2 cleartext case
- let msg_handler = HttpMessageHandlerBuilder::default()
- .forwarder(Arc::new(Forwarder::new().await))
- .globals(globals.clone())
- .build()?;
+ let msg_handler = Arc::new(
+ HttpMessageHandlerBuilder::default()
+ .forwarder(Arc::new(Forwarder::new().await))
+ .globals(globals.clone())
+ .build()?,
+ );
let addresses = globals.proxy_config.listen_sockets.clone();
let futures = select_all(addresses.into_iter().map(|addr| {
diff --git a/rpxy-lib/src/proxy/proxy_h3.rs b/rpxy-lib/src/proxy/proxy_h3.rs
index 7773ad9..fd07521 100644
--- a/rpxy-lib/src/proxy/proxy_h3.rs
+++ b/rpxy-lib/src/proxy/proxy_h3.rs
@@ -15,7 +15,7 @@ where
U: CryptoSource + Clone + Sync + Send + 'static,
{
pub(super) async fn connection_serve_h3(
- self,
+ &self,
quic_connection: C,
tls_server_name: ServerNameBytesExp,
client_addr: SocketAddr,
@@ -79,7 +79,7 @@ where
}
async fn stream_serve_h3(
- self,
+ &self,
req: Request<()>,
stream: RequestStream,
client_addr: SocketAddr,
diff --git a/rpxy-lib/src/proxy/proxy_main.rs b/rpxy-lib/src/proxy/proxy_main.rs
index 166f048..9bfcde9 100644
--- a/rpxy-lib/src/proxy/proxy_main.rs
+++ b/rpxy-lib/src/proxy/proxy_main.rs
@@ -40,7 +40,7 @@ where
{
pub listening_on: SocketAddr,
pub tls_enabled: bool, // TCP待受がTLSかどうか
- pub msg_handler: HttpMessageHandler,
+ pub msg_handler: Arc>,
pub globals: Arc>,
}
@@ -49,6 +49,21 @@ where
T: Connect + Clone + Sync + Send + 'static,
U: CryptoSource + Clone + Sync + Send,
{
+ /// Wrapper function to handle request
+ async fn serve(
+ handler: Arc>,
+ req: Request,
+ client_addr: SocketAddr,
+ listen_addr: SocketAddr,
+ tls_enabled: bool,
+ tls_server_name: Option,
+ ) -> Result> {
+ handler
+ .handle_request(req, client_addr, listen_addr, tls_enabled, tls_server_name)
+ .await
+ }
+
+ /// Serves requests from clients
pub(super) fn client_serve(
self,
stream: I,
@@ -72,7 +87,8 @@ where
.serve_connection(
stream,
service_fn(move |req: Request| {
- self.msg_handler.clone().handle_request(
+ Self::serve(
+ self.msg_handler.clone(),
req,
peer_addr,
self.listening_on,
@@ -91,11 +107,11 @@ where
});
}
+ /// Start without TLS (HTTP cleartext)
async fn start_without_tls(self, server: Http) -> Result<()> {
let listener_service = async {
let tcp_socket = bind_tcp_socket(&self.listening_on)?;
let tcp_listener = tcp_socket.listen(self.globals.proxy_config.tcp_listen_backlog)?;
- // let tcp_listener = TcpListener::bind(&self.listening_on).await?;
info!("Start TCP proxy serving with HTTP request for configured host names");
while let Ok((stream, _client_addr)) = tcp_listener.accept().await {
self.clone().client_serve(stream, server.clone(), _client_addr, None);
@@ -106,6 +122,7 @@ where
Ok(())
}
+ /// Entrypoint for HTTP/1.1 and HTTP/2 servers
pub async fn start(self) -> Result<()> {
let mut server = Http::new();
server.http1_keep_alive(self.globals.proxy_config.keepalive);
diff --git a/rpxy-lib/src/proxy/socket.rs b/rpxy-lib/src/proxy/socket.rs
index a8b9f01..9e4c8f9 100644
--- a/rpxy-lib/src/proxy/socket.rs
+++ b/rpxy-lib/src/proxy/socket.rs
@@ -32,7 +32,7 @@ pub(super) fn bind_udp_socket(listening_on: &SocketAddr) -> Result {
} else {
Socket::new(Domain::IPV4, Type::DGRAM, Some(Protocol::UDP))
}?;
- // socket.set_reuse_address(true)?; // This isn't necessary
+ socket.set_reuse_address(true)?; // This isn't necessary?
socket.set_reuse_port(true)?;
if let Err(e) = socket.bind(&(*listening_on).into()) {