History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg/javax/net/ssl/SSLServerSocketFactory.java (1 of 18352 files). Show all

Unified · Split

java/pkg/javax/net/ssl/SSLServerSocketFactory.java+194−0
@@ -0,0 +1,194 @@
1+/*
2+ * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved.
3+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+ *
5+ * This code is free software; you can redistribute it and/or modify it
6+ * under the terms of the GNU General Public License version 2 only, as
7+ * published by the Free Software Foundation. Oracle designates this
8+ * particular file as subject to the "Classpath" exception as provided
9+ * by Oracle in the LICENSE file that accompanied this code.
10+ *
11+ * This code is distributed in the hope that it will be useful, but WITHOUT
12+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14+ * version 2 for more details (a copy is included in the LICENSE file that
15+ * accompanied this code).
16+ *
17+ * You should have received a copy of the GNU General Public License version
18+ * 2 along with this work; if not, write to the Free Software Foundation,
19+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20+ *
21+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22+ * or visit www.oracle.com if you need additional information or have any
23+ * questions.
24+ */
25+
26+
27+package javax.net.ssl;
28+
29+import java.io.IOException;
30+import java.net.InetAddress;
31+import java.net.ServerSocket;
32+import java.net.SocketException;
33+import javax.net.ServerSocketFactory;
34+import java.security.*;
35+
36+/**
37+ * <code>SSLServerSocketFactory</code>s create
38+ * <code>SSLServerSocket</code>s.
39+ *
40+ * @since 1.4
41+ * @see SSLSocket
42+ * @see SSLServerSocket
43+ * @author David Brownell
44+ */
45+public abstract class SSLServerSocketFactory extends ServerSocketFactory
46+{
47+ private static SSLServerSocketFactory theFactory;
48+
49+ private static boolean propertyChecked;
50+
51+ private static void log(String msg) {
52+ if (SSLSocketFactory.DEBUG) {
53+ System.out.println(msg);
54+ }
55+ }
56+
57+ /**
58+ * Constructor is used only by subclasses.
59+ */
60+ protected SSLServerSocketFactory() { /* NOTHING */ }
61+
62+ /**
63+ * Returns the default SSL server socket factory.
64+ *
65+ * <p>The first time this method is called, the security property
66+ * "ssl.ServerSocketFactory.provider" is examined. If it is non-null, a
67+ * class by that name is loaded and instantiated. If that is successful and
68+ * the object is an instance of SSLServerSocketFactory, it is made the
69+ * default SSL server socket factory.
70+ *
71+ * <p>Otherwise, this method returns
72+ * <code>SSLContext.getDefault().getServerSocketFactory()</code>. If that
73+ * call fails, an inoperative factory is returned.
74+ *
75+ * @return the default <code>ServerSocketFactory</code>
76+ * @see SSLContext#getDefault
77+ */
78+ public static synchronized ServerSocketFactory getDefault() {
79+ if (theFactory != null) {
80+ return theFactory;
81+ }
82+
83+ if (propertyChecked == false) {
84+ propertyChecked = true;
85+ String clsName = SSLSocketFactory.getSecurityProperty
86+ ("ssl.ServerSocketFactory.provider");
87+ if (clsName != null) {
88+ log("setting up default SSLServerSocketFactory");
89+ try {
90+ Class cls = null;
91+ try {
92+ cls = Class.forName(clsName);
93+ } catch (ClassNotFoundException e) {
94+ ClassLoader cl = ClassLoader.getSystemClassLoader();
95+ if (cl != null) {
96+ cls = cl.loadClass(clsName);
97+ }
98+ }
99+ log("class " + clsName + " is loaded");
100+ SSLServerSocketFactory fac = (SSLServerSocketFactory)cls.newInstance();
101+ log("instantiated an instance of class " + clsName);
102+ theFactory = fac;
103+ return fac;
104+ } catch (Exception e) {
105+ log("SSLServerSocketFactory instantiation failed: " + e);
106+ theFactory = new DefaultSSLServerSocketFactory(e);
107+ return theFactory;
108+ }
109+ }
110+ }
111+
112+ try {
113+ return SSLContext.getDefault().getServerSocketFactory();
114+ } catch (NoSuchAlgorithmException e) {
115+ return new DefaultSSLServerSocketFactory(e);
116+ }
117+ }
118+
119+ /**
120+ * Returns the list of cipher suites which are enabled by default.
121+ * Unless a different list is enabled, handshaking on an SSL connection
122+ * will use one of these cipher suites. The minimum quality of service
123+ * for these defaults requires confidentiality protection and server
124+ * authentication (that is, no anonymous cipher suites).
125+ *
126+ * @see #getSupportedCipherSuites()
127+ * @return array of the cipher suites enabled by default
128+ */
129+ public abstract String [] getDefaultCipherSuites();
130+
131+
132+ /**
133+ * Returns the names of the cipher suites which could be enabled for use
134+ * on an SSL connection created by this factory.
135+ * Normally, only a subset of these will actually
136+ * be enabled by default, since this list may include cipher suites which
137+ * do not meet quality of service requirements for those defaults. Such
138+ * cipher suites are useful in specialized applications.
139+ *
140+ * @return an array of cipher suite names
141+ * @see #getDefaultCipherSuites()
142+ */
143+ public abstract String [] getSupportedCipherSuites();
144+}
145+
146+
147+//
148+// The default factory does NOTHING.
149+//
150+class DefaultSSLServerSocketFactory extends SSLServerSocketFactory {
151+
152+ private final Exception reason;
153+
154+ DefaultSSLServerSocketFactory(Exception reason) {
155+ this.reason = reason;
156+ }
157+
158+ private ServerSocket throwException() throws SocketException {
159+ throw (SocketException)
160+ new SocketException(reason.toString()).initCause(reason);
161+ }
162+
163+ public ServerSocket createServerSocket() throws IOException {
164+ return throwException();
165+ }
166+
167+
168+ public ServerSocket createServerSocket(int port)
169+ throws IOException
170+ {
171+ return throwException();
172+ }
173+
174+ public ServerSocket createServerSocket(int port, int backlog)
175+ throws IOException
176+ {
177+ return throwException();
178+ }
179+
180+ public ServerSocket
181+ createServerSocket(int port, int backlog, InetAddress ifAddress)
182+ throws IOException
183+ {
184+ return throwException();
185+ }
186+
187+ public String [] getDefaultCipherSuites() {
188+ return new String[0];
189+ }
190+
191+ public String [] getSupportedCipherSuites() {
192+ return new String[0];
193+ }
194+}