From dd327faee29a8a860edbe45a1d4287320b395c63 Mon Sep 17 00:00:00 2001 From: Lucio Franco Date: Mon, 30 Sep 2019 14:10:25 -0400 Subject: [PATCH] add more to cargo toml and fix openssl --- tonic/Cargo.toml | 17 +++++++++++++++++ tonic/src/transport/service/tls.rs | 23 +++++++++-------------- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/tonic/Cargo.toml b/tonic/Cargo.toml index c033c4c..56bbb6e 100644 --- a/tonic/Cargo.toml +++ b/tonic/Cargo.toml @@ -1,9 +1,26 @@ [package] name = "tonic" +# When releasing to crates.io: +# - Remove path dependencies +# - Update html_root_url. +# - Update doc url +# - Cargo.toml +# - README.md +# - Update CHANGELOG.md. +# - Create "v0.1.x" git tag. version = "0.1.0-alpha.1" authors = ["Lucio Franco "] edition = "2018" license = "MIT" +documentation = "https://docs.rs/tonic/0.1.0-alpha.1/tonic/" +repository = "https://github.com/hyperium/tonic" +homepage = "https://tokio.rs" +description = """ +A gRPC over HTTP/2 implementation focused on high performance, interoperability, and flexibility. +""" +readme = "README.md" +categories = ["web-programming", "network-programming", "asynchronous"] +keywords = ["rpc", "grpc", "async", "futures", "protobuf"] [features] default = ["transport", "codegen", "prost"] diff --git a/tonic/src/transport/service/tls.rs b/tonic/src/transport/service/tls.rs index 33cde43..40918d6 100644 --- a/tonic/src/transport/service/tls.rs +++ b/tonic/src/transport/service/tls.rs @@ -3,7 +3,7 @@ use crate::transport::{Certificate, Identity}; #[cfg(feature = "openssl")] use openssl1::{ pkey::PKey, - ssl::{SslAcceptor, SslConnector, SslMethod}, + ssl::{SslAcceptor, SslConnector, SslMethod, select_next_proto, AlpnError}, x509::X509, }; use std::{fmt, sync::Arc}; @@ -14,7 +14,6 @@ use tokio_rustls::{ webpki::DNSNameRef, TlsAcceptor as RustlsAcceptor, TlsConnector as RustlsConnector, }; -#[allow(unused_import)] use tracing::trace; /// h2 alpn in wire format for openssl. @@ -95,11 +94,10 @@ impl TlsConnector { let config = connector.configure()?; let tls = tokio_openssl::connect(config, &self.domain, io).await?; - // FIXME: alpn returned from interop server is not working - // match tls.ssl().selected_alpn_protocol() { - // Some(b) if b == b"h2" => trace!("HTTP/2 succesfully negotiated."), - // _ => return Err(TlsError::H2NotNegotiated.into()), - // }; + match tls.ssl().selected_alpn_protocol() { + Some(b) if b == b"h2" => trace!("HTTP/2 succesfully negotiated."), + _ => return Err(TlsError::H2NotNegotiated.into()), + }; BoxedIo::new(tls) } @@ -171,9 +169,12 @@ impl TlsAcceptor { let mut config = SslAcceptor::mozilla_modern(SslMethod::tls())?; - config.set_alpn_protos(ALPN_H2_WIRE)?; config.set_private_key(&key)?; config.set_certificate(&cert)?; + config.set_alpn_protos(ALPN_H2_WIRE)?; + config.set_alpn_select_callback(|_ssl, alpn| { + select_next_proto(ALPN_H2_WIRE, alpn).ok_or(AlpnError::NOACK) + }); Ok(Self { inner: Acceptor::Openssl(config.build()), @@ -207,11 +208,6 @@ impl TlsAcceptor { #[cfg(feature = "openssl")] Acceptor::Openssl(acceptor) => { let tls = tokio_openssl::accept(&acceptor, io).await?; - - // let ssl = tls.ssl(); - - // ssl.set_alpn_protos(ALPN_H2_WIRE); - BoxedIo::new(tls) } @@ -219,7 +215,6 @@ impl TlsAcceptor { Acceptor::Rustls(config) => { let acceptor = RustlsAcceptor::from(config.clone()); let tls = acceptor.accept(io).await?; - BoxedIo::new(tls) }