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 * http://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 }