diff --git a/SECURITY.md b/SECURITY.md index ee702f9fde..46de8f4f8b 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -30,7 +30,7 @@ Support for OpenSSL is only provided for the Netty transport via [netty-tcnative ### OpenSSL: Dynamic vs Static (which to use?) -As of version `1.1.33.Fork13`, netty-tcnative provides two options for usage: statically or dynamically linked. For simplification of initial setup, +As of version `1.1.33.Fork14`, netty-tcnative provides two options for usage: statically or dynamically linked. For simplification of initial setup, we recommend that users first look at `netty-tcnative-boringssl-static`, which is statically linked against BoringSSL and Apache APR. Using this artifact requires no extra installation and guarantees that ALPN and the ciphers required for HTTP/2 are available. @@ -60,7 +60,7 @@ In Maven, you can use the [os-maven-plugin](https://github.com/trustin/os-maven- io.netty netty-tcnative-boringssl-static - 1.1.33.Fork13 + 1.1.33.Fork14 ${os.detected.classifier} @@ -96,7 +96,7 @@ buildscript { apply plugin: "com.google.osdetector" dependencies { - compile 'io.netty:netty-tcnative-boringssl-static:1.1.33.Fork13:' + osdetector.classifier + compile 'io.netty:netty-tcnative-boringssl-static:1.1.33.Fork14:' + osdetector.classifier } ``` @@ -131,7 +131,7 @@ In Maven, you can use the [os-maven-plugin](https://github.com/trustin/os-maven- io.netty netty-tcnative - 1.1.33.Fork13 + 1.1.33.Fork14 ${tcnative.classifier} @@ -199,7 +199,7 @@ if (osdetector.os == "linux" && osdetector.release.isLike("fedora")) { } dependencies { - compile 'io.netty:netty-tcnative:1.1.33.Fork13:' + tcnative_classifier + compile 'io.netty:netty-tcnative:1.1.33.Fork14:' + tcnative_classifier } ``` diff --git a/build.gradle b/build.gradle index 8f36af8473..eac869c2cf 100644 --- a/build.gradle +++ b/build.gradle @@ -136,9 +136,9 @@ subprojects { protobuf_nano: "com.google.protobuf.nano:protobuf-javanano:${protobufNanoVersion}", protobuf_plugin: 'com.google.protobuf:protobuf-gradle-plugin:0.7.4', - netty: 'io.netty:netty-codec-http2:4.1.0.CR1', - netty_epoll: 'io.netty:netty-transport-native-epoll:4.1.0.CR1' + epoll_suffix, - netty_tcnative: 'io.netty:netty-tcnative-boringssl-static:1.1.33.Fork13:' + osdetector.classifier, + netty: 'io.netty:netty-codec-http2:4.1.0.CR3', + netty_epoll: 'io.netty:netty-transport-native-epoll:4.1.0.CR3' + epoll_suffix, + netty_tcnative: 'io.netty:netty-tcnative-boringssl-static:1.1.33.Fork14:' + osdetector.classifier, // Test dependencies. junit: 'junit:junit:4.11', diff --git a/netty/src/main/java/io/grpc/netty/NettyClientHandler.java b/netty/src/main/java/io/grpc/netty/NettyClientHandler.java index 5e82ead48a..47c1c2fd0a 100644 --- a/netty/src/main/java/io/grpc/netty/NettyClientHandler.java +++ b/netty/src/main/java/io/grpc/netty/NettyClientHandler.java @@ -114,7 +114,6 @@ class NettyClientHandler extends AbstractNettyHandler { private Http2Ping ping; private Status goAwayStatus; private Throwable goAwayStatusThrowable; - private int nextStreamId; static NettyClientHandler newHandler(ManagedClientTransport.Listener listener, int flowControlWindow, int maxHeaderListSize, @@ -185,7 +184,6 @@ class NettyClientHandler extends AbstractNettyHandler { Http2Connection connection = encoder.connection(); streamKey = connection.newKey(); - nextStreamId = connection.local().nextStreamId(); connection.addListener(new Http2ConnectionAdapter() { @Override public void onGoAwayReceived(int lastStreamId, long errorCode, ByteBuf debugData) { @@ -336,7 +334,7 @@ class NettyClientHandler extends AbstractNettyHandler { // Get the stream ID for the new stream. final int streamId; try { - streamId = getAndIncrementNextStreamId(); + streamId = incrementAndGetNextStreamId(); } catch (StatusException e) { // Stream IDs have been exhausted for this connection. Fail the promise immediately. promise.setFailure(e); @@ -531,16 +529,14 @@ class NettyClientHandler extends AbstractNettyHandler { return stream == null ? null : (NettyClientStream) stream.getProperty(streamKey); } - private int getAndIncrementNextStreamId() throws StatusException { + private int incrementAndGetNextStreamId() throws StatusException { + int nextStreamId = connection().local().incrementAndGetNextStreamId(); if (nextStreamId < 0) { logger.fine("Stream IDs have been exhausted for this connection. " + "Initiating graceful shutdown of the connection."); throw EXHAUSTED_STREAMS_STATUS.asException(); } - - int id = nextStreamId; - nextStreamId += 2; - return id; + return nextStreamId; } private Http2Stream requireHttp2Stream(int streamId) {