fix handling upgrade
This commit is contained in:
parent
111e9bda18
commit
c3c6d4f4fd
2 changed files with 51 additions and 53 deletions
|
|
@ -150,7 +150,18 @@ where
|
||||||
res_backend.log_debug(&backend.server_name, &client_addr, Some("(from Backend)"));
|
res_backend.log_debug(&backend.server_name, &client_addr, Some("(from Backend)"));
|
||||||
// let response_log = res_backend.status().to_string();
|
// let response_log = res_backend.status().to_string();
|
||||||
|
|
||||||
if res_backend.status() == StatusCode::SWITCHING_PROTOCOLS {
|
if res_backend.status() != StatusCode::SWITCHING_PROTOCOLS {
|
||||||
|
// Generate response to client
|
||||||
|
if self.generate_response_forwarded(&mut res_backend).is_ok() {
|
||||||
|
// info!("{} => {}", request_log, response_log);
|
||||||
|
res_backend.log_debug(&backend.server_name, &client_addr, Some("(to Client)"));
|
||||||
|
log_data.status_code(&res_backend.status()).output();
|
||||||
|
return Ok(res_backend);
|
||||||
|
} else {
|
||||||
|
return self.return_with_error_log(StatusCode::INTERNAL_SERVER_ERROR, &mut log_data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Handle StatusCode::SWITCHING_PROTOCOLS in response
|
// Handle StatusCode::SWITCHING_PROTOCOLS in response
|
||||||
let upgrade_in_response = extract_upgrade(res_backend.headers());
|
let upgrade_in_response = extract_upgrade(res_backend.headers());
|
||||||
if if let (Some(u_req), Some(u_res)) =
|
if if let (Some(u_req), Some(u_res)) =
|
||||||
|
|
@ -170,14 +181,12 @@ where
|
||||||
error!("Response does not have an upgrade extension");
|
error!("Response does not have an upgrade extension");
|
||||||
return self.return_with_error_log(StatusCode::INTERNAL_SERVER_ERROR, &mut log_data);
|
return self.return_with_error_log(StatusCode::INTERNAL_SERVER_ERROR, &mut log_data);
|
||||||
};
|
};
|
||||||
let mut response_upgraded = if let Ok(res) = onupgrade.await {
|
|
||||||
res
|
|
||||||
} else {
|
|
||||||
error!("No upgrade is available");
|
|
||||||
return self.return_with_error_log(StatusCode::INTERNAL_SERVER_ERROR, &mut log_data);
|
|
||||||
};
|
|
||||||
|
|
||||||
self.globals.runtime_handle.spawn(async move {
|
self.globals.runtime_handle.spawn(async move {
|
||||||
|
let mut response_upgraded = onupgrade.await.map_err(|e| {
|
||||||
|
error!("Failed to upgrade response: {}", e);
|
||||||
|
anyhow!("Failed to upgrade response: {}", e)
|
||||||
|
})?;
|
||||||
let mut request_upgraded = request_upgraded.await.map_err(|e| {
|
let mut request_upgraded = request_upgraded.await.map_err(|e| {
|
||||||
error!("Failed to upgrade request: {}", e);
|
error!("Failed to upgrade request: {}", e);
|
||||||
anyhow!("Failed to upgrade request: {}", e)
|
anyhow!("Failed to upgrade request: {}", e)
|
||||||
|
|
@ -187,7 +196,7 @@ where
|
||||||
.map_err(|e| anyhow!("Coping between upgraded connections failed: {}", e))?;
|
.map_err(|e| anyhow!("Coping between upgraded connections failed: {}", e))?;
|
||||||
Ok(()) as Result<()>
|
Ok(()) as Result<()>
|
||||||
});
|
});
|
||||||
// info!("{} => {}", request_log, response_log);
|
log_data.status_code(&res_backend.status()).output();
|
||||||
Ok(res_backend)
|
Ok(res_backend)
|
||||||
} else {
|
} else {
|
||||||
error!("Request does not have an upgrade extension");
|
error!("Request does not have an upgrade extension");
|
||||||
|
|
@ -200,17 +209,6 @@ where
|
||||||
);
|
);
|
||||||
self.return_with_error_log(StatusCode::INTERNAL_SERVER_ERROR, &mut log_data)
|
self.return_with_error_log(StatusCode::INTERNAL_SERVER_ERROR, &mut log_data)
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
// Generate response to client
|
|
||||||
if self.generate_response_forwarded(&mut res_backend).is_ok() {
|
|
||||||
// info!("{} => {}", request_log, response_log);
|
|
||||||
res_backend.log_debug(&backend.server_name, &client_addr, Some("(to Client)"));
|
|
||||||
log_data.status_code(&res_backend.status()).output();
|
|
||||||
Ok(res_backend)
|
|
||||||
} else {
|
|
||||||
self.return_with_error_log(StatusCode::INTERNAL_SERVER_ERROR, &mut log_data)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////
|
////////////////////////////////////////////////////
|
||||||
|
|
|
||||||
|
|
@ -101,7 +101,7 @@ where
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "h3")]
|
#[cfg(feature = "h3")]
|
||||||
async fn parse_sni_and_get_crypto_h3<'a, 'b>(
|
async fn parse_sni_and_get_crypto_h3<'a>(
|
||||||
&self,
|
&self,
|
||||||
peeked_conn: &mut quinn::Connecting,
|
peeked_conn: &mut quinn::Connecting,
|
||||||
server_crypto_map: &'a ServerCryptoMap,
|
server_crypto_map: &'a ServerCryptoMap,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue