use super::{
build_auth_request::build_auth_request, generate_padding::generate_padding,
validate_auth_response::validate_auth_response,
};
use crate::{HysteriaError, config::Config};
pub(crate) async fn authenticate_connection(
conn: &quinn::Connection,
config: &Config,
) -> Result<(), HysteriaError> {
let (h3_conn, mut request_stream) =
h3::client::new(h3_quinn::Connection::new(conn.clone())).await?;
let padding = generate_padding();
let req = build_auth_request(config, &padding)?;
let mut stream = request_stream.send_request(req).await?;
stream.finish().await?;
let resp = stream.recv_response().await?;
tokio::spawn(async move {
let _ = h3_conn;
});
validate_auth_response(&resp)?;
Ok(())
}