// TODO: Perhaps we should check unconditionally whether the IP address is consistent with header,
fn deconstruct_upgrade<S>(upgraded: hyper::upgrade::Upgraded) -> Result<BufReader<S>, anyhow::Error>
/// Recover the application stream from `request`, and launch tasks to transfer data between the application and
async fn transfer<S>(request: Request, tor_stream: arti_client::DataStream) -> anyhow::Result<()>