From 931c8207fc29e28728a8f034a7b540724a12733a Mon Sep 17 00:00:00 2001 From: ashthespy Date: Sat, 23 Jan 2021 22:21:42 +0000 Subject: [PATCH] [Connect] Migrate to hyper ~v12 --- connect/Cargo.toml | 2 +- connect/src/discovery.rs | 60 +++++++++++++++++++++++----------------- 2 files changed, 36 insertions(+), 26 deletions(-) diff --git a/connect/Cargo.toml b/connect/Cargo.toml index 8235870..f21faef 100644 --- a/connect/Cargo.toml +++ b/connect/Cargo.toml @@ -20,7 +20,7 @@ version = "0.1.3" [dependencies] base64 = "0.13" futures = "0.1" -hyper = "0.11" +hyper = "0.12" log = "0.4" num-bigint = "0.3" protobuf = "~2.14.0" diff --git a/connect/src/discovery.rs b/connect/src/discovery.rs index 9779e6f..e3bc227 100644 --- a/connect/src/discovery.rs +++ b/connect/src/discovery.rs @@ -5,8 +5,10 @@ use base64; use futures::sync::mpsc; use futures::{Future, Poll, Stream}; use hmac::{Hmac, Mac}; -use hyper::server::{Http, Request, Response, Service}; -use hyper::{self, Get, Post, StatusCode}; + +use hyper::{ + self, server::conn::Http, service::Service, Body, Method, Request, Response, StatusCode, +}; use sha1::{Digest, Sha1}; #[cfg(feature = "with-dns-sd")] @@ -67,7 +69,7 @@ impl Discovery { fn handle_get_info( &self, _params: &BTreeMap, - ) -> ::futures::Finished { + ) -> ::futures::Finished, hyper::Error> { let public_key = self.0.public_key.to_bytes_be(); let public_key = base64::encode(&public_key); @@ -88,13 +90,13 @@ impl Discovery { }); let body = result.to_string(); - ::futures::finished(Response::new().with_body(body)) + ::futures::finished(Response::new(Body::from(body))) } fn handle_add_user( &self, params: &BTreeMap, - ) -> ::futures::Finished { + ) -> ::futures::Finished, hyper::Error> { let username = params.get("userName").unwrap(); let encrypted_blob = params.get("blob").unwrap(); let client_key = params.get("clientKey").unwrap(); @@ -136,7 +138,7 @@ impl Discovery { }); let body = result.to_string(); - return ::futures::finished(Response::new().with_body(body)); + return ::futures::finished(Response::new(Body::from(body))); } let decrypted = { @@ -161,30 +163,33 @@ impl Discovery { }); let body = result.to_string(); - ::futures::finished(Response::new().with_body(body)) + return ::futures::finished(Response::new(Body::from(body))); } - fn not_found(&self) -> ::futures::Finished { - ::futures::finished(Response::new().with_status(StatusCode::NotFound)) + fn not_found(&self) -> ::futures::Finished, hyper::Error> { + let mut res = Response::default(); + *res.status_mut() = StatusCode::NOT_FOUND; + ::futures::finished(res) } } impl Service for Discovery { - type Request = Request; - type Response = Response; + type ReqBody = Body; + type ResBody = Body; type Error = hyper::Error; - type Future = Box>; - fn call(&self, request: Request) -> Self::Future { + type Future = Box, Error = hyper::Error> + Send>; + fn call(&mut self, request: Request<(Self::ReqBody)>) -> Self::Future { let mut params = BTreeMap::new(); - let (method, uri, _, _, body) = request.deconstruct(); - if let Some(query) = uri.query() { + let (parts, body) = request.into_parts(); + + if let Some(query) = parts.uri.query() { params.extend(url::form_urlencoded::parse(query.as_bytes()).into_owned()); } - if method != Get { - debug!("{:?} {:?} {:?}", method, uri.path(), params); + if parts.method != Method::GET { + debug!("{:?} {:?} {:?}", parts.method, parts.uri.path(), params); } let this = self.clone(); @@ -198,9 +203,9 @@ impl Service for Discovery { params }) .and_then(move |params| { - match (method, params.get("action").map(AsRef::as_ref)) { - (Get, Some("getInfo")) => this.handle_get_info(¶ms), - (Post, Some("addUser")) => this.handle_add_user(¶ms), + match (parts.method, params.get("action").map(AsRef::as_ref)) { + (Method::GET, Some("getInfo")) => this.handle_get_info(¶ms), + (Method::POST, Some("addUser")) => this.handle_add_user(¶ms), _ => this.not_found(), } }), @@ -232,7 +237,7 @@ pub fn discovery( let http = Http::new(); http.serve_addr_handle( &format!("0.0.0.0:{}", port).parse().unwrap(), - &handle, + handle.new_tokio_handle(), move || Ok(discovery.clone()), ) .unwrap() @@ -244,10 +249,15 @@ pub fn discovery( let server_future = { let handle = handle.clone(); serve - .for_each(move |connection| { - handle.spawn(connection.then(|_| Ok(()))); - Ok(()) - }) + .for_each( + move |connecting: hyper::server::conn::Connecting< + hyper::server::conn::AddrStream, + futures::Failed<_, hyper::Error>, + >| { + handle.spawn(connecting.then(|_| Ok(()))); + Ok(()) + }, + ) .then(|_| Ok(())) }; handle.spawn(server_future);