From 665d59c538e275fd3269bd550b669f08c7b2d50f Mon Sep 17 00:00:00 2001
From: Mat Booth <mat.booth@redhat.com>
Date: Mon, 7 Sep 2020 13:26:20 +0100
Subject: [PATCH 3/7] Remove optional deps jetty alpn and npn

---
 handler/pom.xml                               |  10 --
 .../JdkAlpnApplicationProtocolNegotiator.java |   5 -
 .../JdkNpnApplicationProtocolNegotiator.java  |  10 +-
 .../netty/handler/ssl/JettyAlpnSslEngine.java | 157 ------------------
 .../netty/handler/ssl/JettyNpnSslEngine.java  | 122 --------------
 pom.xml                                       |  14 --
 6 files changed, 2 insertions(+), 316 deletions(-)
 delete mode 100644 handler/src/main/java/io/netty/handler/ssl/JettyAlpnSslEngine.java
 delete mode 100644 handler/src/main/java/io/netty/handler/ssl/JettyNpnSslEngine.java

diff --git a/handler/pom.xml b/handler/pom.xml
index 635808eabe..805114f19d 100644
--- a/handler/pom.xml
+++ b/handler/pom.xml
@@ -86,16 +86,6 @@
       <artifactId>bctls-jdk15on</artifactId>
       <optional>true</optional>
     </dependency>
-    <dependency>
-      <groupId>org.eclipse.jetty.npn</groupId>
-      <artifactId>npn-api</artifactId>
-      <optional>true</optional>
-    </dependency>
-    <dependency>
-      <groupId>org.eclipse.jetty.alpn</groupId>
-      <artifactId>alpn-api</artifactId>
-      <optional>true</optional>
-    </dependency>
     <dependency>
       <groupId>org.mockito</groupId>
       <artifactId>mockito-core</artifactId>
diff --git a/handler/src/main/java/io/netty/handler/ssl/JdkAlpnApplicationProtocolNegotiator.java b/handler/src/main/java/io/netty/handler/ssl/JdkAlpnApplicationProtocolNegotiator.java
index b5715e87ff..df87f0f43a 100644
--- a/handler/src/main/java/io/netty/handler/ssl/JdkAlpnApplicationProtocolNegotiator.java
+++ b/handler/src/main/java/io/netty/handler/ssl/JdkAlpnApplicationProtocolNegotiator.java
@@ -27,7 +27,6 @@ import javax.net.ssl.SSLEngine;
 @Deprecated
 public final class JdkAlpnApplicationProtocolNegotiator extends JdkBaseApplicationProtocolNegotiator {
     private static final boolean AVAILABLE = JdkAlpnSslUtils.supportsAlpn() ||
-                                             JettyAlpnSslEngine.isAvailable() ||
                                              BouncyCastle.isAvailable();
 
     private static final SslEngineWrapperFactory ALPN_WRAPPER = AVAILABLE ? new AlpnWrapper() : new FailureWrapper();
@@ -135,10 +134,6 @@ public final class JdkAlpnApplicationProtocolNegotiator extends JdkBaseApplicati
             if (JdkAlpnSslUtils.supportsAlpn()) {
                 return new JdkAlpnSslEngine(engine, applicationNegotiator, isServer);
             }
-            if (JettyAlpnSslEngine.isAvailable()) {
-                return isServer ? JettyAlpnSslEngine.newServerEngine(engine, applicationNegotiator)
-                        : JettyAlpnSslEngine.newClientEngine(engine, applicationNegotiator);
-            }
             throw new UnsupportedOperationException("ALPN not supported. Unable to wrap SSLEngine of type '"
                     + engine.getClass().getName() + "')");
         }
diff --git a/handler/src/main/java/io/netty/handler/ssl/JdkNpnApplicationProtocolNegotiator.java b/handler/src/main/java/io/netty/handler/ssl/JdkNpnApplicationProtocolNegotiator.java
index cbaeb0c462..569c3011c1 100644
--- a/handler/src/main/java/io/netty/handler/ssl/JdkNpnApplicationProtocolNegotiator.java
+++ b/handler/src/main/java/io/netty/handler/ssl/JdkNpnApplicationProtocolNegotiator.java
@@ -25,17 +25,11 @@ import javax.net.ssl.SSLEngine;
 @Deprecated
 public final class JdkNpnApplicationProtocolNegotiator extends JdkBaseApplicationProtocolNegotiator {
     private static final SslEngineWrapperFactory NPN_WRAPPER = new SslEngineWrapperFactory() {
-        {
-            if (!JettyNpnSslEngine.isAvailable()) {
-                throw new RuntimeException("NPN unsupported. Is your classpath configured correctly?"
-                        + " See https://wiki.eclipse.org/Jetty/Feature/NPN");
-            }
-        }
-
         @Override
         public SSLEngine wrapSslEngine(SSLEngine engine,
                                        JdkApplicationProtocolNegotiator applicationNegotiator, boolean isServer) {
-            return new JettyNpnSslEngine(engine, applicationNegotiator, isServer);
+            throw new UnsupportedOperationException("NPN not supported. Unable to wrap SSLEngine of type '"
+                    + engine.getClass().getName() + "')");
         }
     };
 
diff --git a/handler/src/main/java/io/netty/handler/ssl/JettyAlpnSslEngine.java b/handler/src/main/java/io/netty/handler/ssl/JettyAlpnSslEngine.java
deleted file mode 100644
index c8f03f9963..0000000000
--- a/handler/src/main/java/io/netty/handler/ssl/JettyAlpnSslEngine.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright 2014 The Netty Project
- *
- * The Netty Project licenses this file to you under the Apache License,
- * version 2.0 (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at:
- *
- *   https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- */
-package io.netty.handler.ssl;
-
-import static io.netty.handler.ssl.SslUtils.toSSLHandshakeException;
-import static io.netty.util.internal.ObjectUtil.checkNotNull;
-
-import io.netty.handler.ssl.JdkApplicationProtocolNegotiator.ProtocolSelectionListener;
-import io.netty.handler.ssl.JdkApplicationProtocolNegotiator.ProtocolSelector;
-
-import java.util.LinkedHashSet;
-import java.util.List;
-
-import javax.net.ssl.SSLEngine;
-import javax.net.ssl.SSLException;
-
-import io.netty.util.internal.PlatformDependent;
-import org.eclipse.jetty.alpn.ALPN;
-
-abstract class JettyAlpnSslEngine extends JdkSslEngine {
-    private static final boolean available = initAvailable();
-
-    static boolean isAvailable() {
-        return available;
-    }
-
-    private static boolean initAvailable() {
-        if (PlatformDependent.javaVersion() <= 8) {
-            try {
-                // Always use bootstrap class loader.
-                Class.forName("sun.security.ssl.ALPNExtension", true, null);
-                return true;
-            } catch (Throwable ignore) {
-                // alpn-boot was not loaded.
-            }
-        }
-        return false;
-    }
-
-    static JettyAlpnSslEngine newClientEngine(SSLEngine engine,
-            JdkApplicationProtocolNegotiator applicationNegotiator) {
-        return new ClientEngine(engine, applicationNegotiator);
-    }
-
-    static JettyAlpnSslEngine newServerEngine(SSLEngine engine,
-            JdkApplicationProtocolNegotiator applicationNegotiator) {
-        return new ServerEngine(engine, applicationNegotiator);
-    }
-
-    private JettyAlpnSslEngine(SSLEngine engine) {
-        super(engine);
-    }
-
-    private static final class ClientEngine extends JettyAlpnSslEngine {
-        ClientEngine(SSLEngine engine, final JdkApplicationProtocolNegotiator applicationNegotiator) {
-            super(engine);
-            checkNotNull(applicationNegotiator, "applicationNegotiator");
-            final ProtocolSelectionListener protocolListener = checkNotNull(applicationNegotiator
-                            .protocolListenerFactory().newListener(this, applicationNegotiator.protocols()),
-                    "protocolListener");
-            ALPN.put(engine, new ALPN.ClientProvider() {
-                @Override
-                public List<String> protocols() {
-                    return applicationNegotiator.protocols();
-                }
-
-                @Override
-                public void selected(String protocol) throws SSLException {
-                    try {
-                        protocolListener.selected(protocol);
-                    } catch (Throwable t) {
-                        throw toSSLHandshakeException(t);
-                    }
-                }
-
-                @Override
-                public void unsupported() {
-                    protocolListener.unsupported();
-                }
-            });
-        }
-
-        @Override
-        public void closeInbound() throws SSLException {
-            try {
-                ALPN.remove(getWrappedEngine());
-            } finally {
-                super.closeInbound();
-            }
-        }
-
-        @Override
-        public void closeOutbound() {
-            try {
-                ALPN.remove(getWrappedEngine());
-            } finally {
-                super.closeOutbound();
-            }
-        }
-    }
-
-    private static final class ServerEngine extends JettyAlpnSslEngine {
-        ServerEngine(SSLEngine engine, final JdkApplicationProtocolNegotiator applicationNegotiator) {
-            super(engine);
-            checkNotNull(applicationNegotiator, "applicationNegotiator");
-            final ProtocolSelector protocolSelector = checkNotNull(applicationNegotiator.protocolSelectorFactory()
-                            .newSelector(this, new LinkedHashSet<String>(applicationNegotiator.protocols())),
-                    "protocolSelector");
-            ALPN.put(engine, new ALPN.ServerProvider() {
-                @Override
-                public String select(List<String> protocols) throws SSLException {
-                    try {
-                        return protocolSelector.select(protocols);
-                    } catch (Throwable t) {
-                        throw toSSLHandshakeException(t);
-                    }
-                }
-
-                @Override
-                public void unsupported() {
-                    protocolSelector.unsupported();
-                }
-            });
-        }
-
-        @Override
-        public void closeInbound() throws SSLException {
-            try {
-                ALPN.remove(getWrappedEngine());
-            } finally {
-                super.closeInbound();
-            }
-        }
-
-        @Override
-        public void closeOutbound() {
-            try {
-                ALPN.remove(getWrappedEngine());
-            } finally {
-                super.closeOutbound();
-            }
-        }
-    }
-}
diff --git a/handler/src/main/java/io/netty/handler/ssl/JettyNpnSslEngine.java b/handler/src/main/java/io/netty/handler/ssl/JettyNpnSslEngine.java
deleted file mode 100644
index aad00b5f6d..0000000000
--- a/handler/src/main/java/io/netty/handler/ssl/JettyNpnSslEngine.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright 2014 The Netty Project
- *
- * The Netty Project licenses this file to you under the Apache License,
- * version 2.0 (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at:
- *
- *   https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- */
-
-package io.netty.handler.ssl;
-
-import static io.netty.util.internal.ObjectUtil.checkNotNull;
-import io.netty.handler.ssl.JdkApplicationProtocolNegotiator.ProtocolSelectionListener;
-import io.netty.handler.ssl.JdkApplicationProtocolNegotiator.ProtocolSelector;
-import io.netty.util.internal.PlatformDependent;
-
-import java.util.LinkedHashSet;
-import java.util.List;
-
-import javax.net.ssl.SSLEngine;
-import javax.net.ssl.SSLException;
-
-import org.eclipse.jetty.npn.NextProtoNego;
-import org.eclipse.jetty.npn.NextProtoNego.ClientProvider;
-import org.eclipse.jetty.npn.NextProtoNego.ServerProvider;
-
-final class JettyNpnSslEngine extends JdkSslEngine {
-    private static boolean available;
-
-    static boolean isAvailable() {
-        updateAvailability();
-        return available;
-    }
-
-    private static void updateAvailability() {
-        if (available) {
-            return;
-        }
-        try {
-            // Always use bootstrap class loader.
-            Class.forName("sun.security.ssl.NextProtoNegoExtension", true, null);
-            available = true;
-        } catch (Exception ignore) {
-            // npn-boot was not loaded.
-        }
-    }
-
-    JettyNpnSslEngine(SSLEngine engine, final JdkApplicationProtocolNegotiator applicationNegotiator, boolean server) {
-        super(engine);
-        checkNotNull(applicationNegotiator, "applicationNegotiator");
-
-        if (server) {
-            final ProtocolSelectionListener protocolListener = checkNotNull(applicationNegotiator
-                    .protocolListenerFactory().newListener(this, applicationNegotiator.protocols()),
-                    "protocolListener");
-            NextProtoNego.put(engine, new ServerProvider() {
-                @Override
-                public void unsupported() {
-                    protocolListener.unsupported();
-                }
-
-                @Override
-                public List<String> protocols() {
-                    return applicationNegotiator.protocols();
-                }
-
-                @Override
-                public void protocolSelected(String protocol) {
-                    try {
-                        protocolListener.selected(protocol);
-                    } catch (Throwable t) {
-                        PlatformDependent.throwException(t);
-                    }
-                }
-            });
-        } else {
-            final ProtocolSelector protocolSelector = checkNotNull(applicationNegotiator.protocolSelectorFactory()
-                    .newSelector(this, new LinkedHashSet<String>(applicationNegotiator.protocols())),
-                    "protocolSelector");
-            NextProtoNego.put(engine, new ClientProvider() {
-                @Override
-                public boolean supports() {
-                    return true;
-                }
-
-                @Override
-                public void unsupported() {
-                    protocolSelector.unsupported();
-                }
-
-                @Override
-                public String selectProtocol(List<String> protocols) {
-                    try {
-                        return protocolSelector.select(protocols);
-                    } catch (Throwable t) {
-                        PlatformDependent.throwException(t);
-                        return null;
-                    }
-                }
-            });
-        }
-    }
-
-    @Override
-    public void closeInbound() throws SSLException {
-        NextProtoNego.remove(getWrappedEngine());
-        super.closeInbound();
-    }
-
-    @Override
-    public void closeOutbound() {
-        NextProtoNego.remove(getWrappedEngine());
-        super.closeOutbound();
-    }
-}
diff --git a/pom.xml b/pom.xml
index ad606747ad..735d911dfb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -728,20 +728,6 @@
         <optional>true</optional>
       </dependency>
 
-      <!-- SPDY and HTTP/2 - completely optional -->
-      <dependency>
-        <groupId>org.eclipse.jetty.npn</groupId>
-        <artifactId>npn-api</artifactId>
-        <version>1.1.1.v20141010</version>
-        <scope>provided</scope> <!-- Provided by npn-boot -->
-      </dependency>
-      <dependency>
-        <groupId>org.eclipse.jetty.alpn</groupId>
-        <artifactId>alpn-api</artifactId>
-        <version>1.1.2.v20150522</version>
-        <scope>provided</scope> <!-- Provided by alpn-boot -->
-      </dependency>
-
       <!-- Google Protocol Buffers - completely optional -->
       <dependency>
         <groupId>com.google.protobuf</groupId>
-- 
2.40.0

