todo: switching_protocols in response and transfer-encoding
This commit is contained in:
parent
8db9e647e3
commit
c122ca8b4d
1 changed files with 26 additions and 12 deletions
|
|
@ -1,9 +1,10 @@
|
||||||
// Motivated by https://github.com/felipenoris/hyper-reverse-proxy
|
// Highly motivated by https://github.com/felipenoris/hyper-reverse-proxy
|
||||||
use super::Proxy;
|
use super::Proxy;
|
||||||
use crate::{error::*, log::*};
|
use crate::{error::*, log::*};
|
||||||
use hyper::{
|
use hyper::{
|
||||||
client::connect::Connect,
|
client::connect::Connect,
|
||||||
header::{HeaderMap, HeaderValue},
|
header::{HeaderMap, HeaderValue},
|
||||||
|
http::response,
|
||||||
Body, Request, Response, StatusCode, Uri,
|
Body, Request, Response, StatusCode, Uri,
|
||||||
};
|
};
|
||||||
use std::net::SocketAddr;
|
use std::net::SocketAddr;
|
||||||
|
|
@ -77,21 +78,34 @@ where
|
||||||
};
|
};
|
||||||
debug!("Request to be forwarded: {:?}", req_forwarded);
|
debug!("Request to be forwarded: {:?}", req_forwarded);
|
||||||
|
|
||||||
// // Forward request to
|
// Forward request to
|
||||||
// let res_backend = match self.forwarder.request(req_forwarded).await {
|
let mut res_backend = match self.forwarder.request(req_forwarded).await {
|
||||||
// Ok(res) => res,
|
Ok(res) => res,
|
||||||
// Err(e) => {
|
Err(e) => {
|
||||||
// error!("Failed to get response from backend: {}", e);
|
error!("Failed to get response from backend: {}", e);
|
||||||
// return http_error(StatusCode::BAD_REQUEST);
|
return http_error(StatusCode::BAD_REQUEST);
|
||||||
// }
|
}
|
||||||
// };
|
};
|
||||||
// debug!("Response from backend: {:?}", res_backend.status());
|
debug!("Response from backend: {:?}", res_backend.status());
|
||||||
// Ok(res_backend)
|
|
||||||
|
|
||||||
http_error(StatusCode::NOT_FOUND)
|
// TODO: Handle StatusCode::SWITCHING_PROTOCOLS
|
||||||
|
|
||||||
|
// Generate response to client
|
||||||
|
if generate_response_forwarded(&mut res_backend).is_ok() {
|
||||||
|
Ok(res_backend)
|
||||||
|
} else {
|
||||||
|
http_error(StatusCode::BAD_GATEWAY)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn generate_response_forwarded<B: core::fmt::Debug>(response: &mut Response<B>) -> Result<()> {
|
||||||
|
let headers = response.headers_mut();
|
||||||
|
remove_hop_header(headers);
|
||||||
|
remove_connection_header(headers);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
fn generate_request_forwarded<B: core::fmt::Debug>(
|
fn generate_request_forwarded<B: core::fmt::Debug>(
|
||||||
client_addr: SocketAddr,
|
client_addr: SocketAddr,
|
||||||
mut req: Request<B>,
|
mut req: Request<B>,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue