View Javadoc
1   /*
2    * Copyright 2014 The Netty Project
3    *
4    * The Netty Project licenses this file to you under the Apache License,
5    * version 2.0 (the "License"); you may not use this file except in compliance
6    * with the License. You may obtain a copy of the License at:
7    *
8    *   https://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13   * License for the specific language governing permissions and limitations
14   * under the License.
15   */
16  package io.netty.handler.ssl;
17  
18  import javax.net.ssl.SSLEngine;
19  
20  /**
21   * The {@link JdkApplicationProtocolNegotiator} to use if you need NPN and are using {@link SslProvider#JDK}.
22   *
23   * @deprecated use {@link ApplicationProtocolConfig}.
24   */
25  @Deprecated
26  public final class JdkNpnApplicationProtocolNegotiator extends JdkBaseApplicationProtocolNegotiator {
27      private static final SslEngineWrapperFactory NPN_WRAPPER = new SslEngineWrapperFactory() {
28          {
29              if (!JettyNpnSslEngine.isAvailable()) {
30                  throw new RuntimeException("NPN unsupported. Is your classpath configured correctly?"
31                          + " See https://wiki.eclipse.org/Jetty/Feature/NPN");
32              }
33          }
34  
35          @Override
36          public SSLEngine wrapSslEngine(SSLEngine engine,
37                                         JdkApplicationProtocolNegotiator applicationNegotiator, boolean isServer) {
38              return new JettyNpnSslEngine(engine, applicationNegotiator, isServer);
39          }
40      };
41  
42      /**
43       * Create a new instance.
44       * @param protocols The order of iteration determines the preference of support for protocols.
45       */
46      public JdkNpnApplicationProtocolNegotiator(Iterable<String> protocols) {
47          this(false, protocols);
48      }
49  
50      /**
51       * Create a new instance.
52       * @param protocols The order of iteration determines the preference of support for protocols.
53       */
54      public JdkNpnApplicationProtocolNegotiator(String... protocols) {
55          this(false, protocols);
56      }
57  
58      /**
59       * Create a new instance.
60       * @param failIfNoCommonProtocols Fail with a fatal alert if not common protocols are detected.
61       * @param protocols The order of iteration determines the preference of support for protocols.
62       */
63      public JdkNpnApplicationProtocolNegotiator(boolean failIfNoCommonProtocols, Iterable<String> protocols) {
64          this(failIfNoCommonProtocols, failIfNoCommonProtocols, protocols);
65      }
66  
67      /**
68       * Create a new instance.
69       * @param failIfNoCommonProtocols Fail with a fatal alert if not common protocols are detected.
70       * @param protocols The order of iteration determines the preference of support for protocols.
71       */
72      public JdkNpnApplicationProtocolNegotiator(boolean failIfNoCommonProtocols, String... protocols) {
73          this(failIfNoCommonProtocols, failIfNoCommonProtocols, protocols);
74      }
75  
76      /**
77       * Create a new instance.
78       * @param clientFailIfNoCommonProtocols Client side fail with a fatal alert if not common protocols are detected.
79       * @param serverFailIfNoCommonProtocols Server side fail with a fatal alert if not common protocols are detected.
80       * @param protocols The order of iteration determines the preference of support for protocols.
81       */
82      public JdkNpnApplicationProtocolNegotiator(boolean clientFailIfNoCommonProtocols,
83              boolean serverFailIfNoCommonProtocols, Iterable<String> protocols) {
84          this(clientFailIfNoCommonProtocols ? FAIL_SELECTOR_FACTORY : NO_FAIL_SELECTOR_FACTORY,
85                  serverFailIfNoCommonProtocols ? FAIL_SELECTION_LISTENER_FACTORY : NO_FAIL_SELECTION_LISTENER_FACTORY,
86                  protocols);
87      }
88  
89      /**
90       * Create a new instance.
91       * @param clientFailIfNoCommonProtocols Client side fail with a fatal alert if not common protocols are detected.
92       * @param serverFailIfNoCommonProtocols Server side fail with a fatal alert if not common protocols are detected.
93       * @param protocols The order of iteration determines the preference of support for protocols.
94       */
95      public JdkNpnApplicationProtocolNegotiator(boolean clientFailIfNoCommonProtocols,
96              boolean serverFailIfNoCommonProtocols, String... protocols) {
97          this(clientFailIfNoCommonProtocols ? FAIL_SELECTOR_FACTORY : NO_FAIL_SELECTOR_FACTORY,
98                  serverFailIfNoCommonProtocols ? FAIL_SELECTION_LISTENER_FACTORY : NO_FAIL_SELECTION_LISTENER_FACTORY,
99                  protocols);
100     }
101 
102     /**
103      * Create a new instance.
104      * @param selectorFactory The factory which provides classes responsible for selecting the protocol.
105      * @param listenerFactory The factory which provides to be notified of which protocol was selected.
106      * @param protocols The order of iteration determines the preference of support for protocols.
107      */
108     public JdkNpnApplicationProtocolNegotiator(ProtocolSelectorFactory selectorFactory,
109             ProtocolSelectionListenerFactory listenerFactory, Iterable<String> protocols) {
110         super(NPN_WRAPPER, selectorFactory, listenerFactory, protocols);
111     }
112 
113     /**
114      * Create a new instance.
115      * @param selectorFactory The factory which provides classes responsible for selecting the protocol.
116      * @param listenerFactory The factory which provides to be notified of which protocol was selected.
117      * @param protocols The order of iteration determines the preference of support for protocols.
118      */
119     public JdkNpnApplicationProtocolNegotiator(ProtocolSelectorFactory selectorFactory,
120             ProtocolSelectionListenerFactory listenerFactory, String... protocols) {
121         super(NPN_WRAPPER, selectorFactory, listenerFactory, protocols);
122     }
123 }