001 /* 002 * $HeadURL: http://juliusdavies.ca/svn/not-yet-commons-ssl/tags/commons-ssl-0.3.11/src/java/org/apache/commons/ssl/SSLServerSocketWrapper.java $ 003 * $Revision: 121 $ 004 * $Date: 2007-11-13 21:26:57 -0800 (Tue, 13 Nov 2007) $ 005 * 006 * ==================================================================== 007 * Licensed to the Apache Software Foundation (ASF) under one 008 * or more contributor license agreements. See the NOTICE file 009 * distributed with this work for additional information 010 * regarding copyright ownership. The ASF licenses this file 011 * to you under the Apache License, Version 2.0 (the 012 * "License"); you may not use this file except in compliance 013 * with the License. You may obtain a copy of the License at 014 * 015 * http://www.apache.org/licenses/LICENSE-2.0 016 * 017 * Unless required by applicable law or agreed to in writing, 018 * software distributed under the License is distributed on an 019 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 020 * KIND, either express or implied. See the License for the 021 * specific language governing permissions and limitations 022 * under the License. 023 * ==================================================================== 024 * 025 * This software consists of voluntary contributions made by many 026 * individuals on behalf of the Apache Software Foundation. For more 027 * information on the Apache Software Foundation, please see 028 * <http://www.apache.org/>. 029 * 030 */ 031 032 package org.apache.commons.ssl; 033 034 import javax.net.ssl.SSLServerSocket; 035 import javax.net.ssl.SSLSocket; 036 import java.io.IOException; 037 import java.net.InetAddress; 038 import java.net.Socket; 039 import java.net.SocketAddress; 040 import java.net.SocketException; 041 import java.nio.channels.ServerSocketChannel; 042 043 /** 044 * Wraps an SSLServerSocket - NOTE that the accept() method applies a number of 045 * important common-ssl settings before returning the SSLSocket! 046 * 047 * @author Credit Union Central of British Columbia 048 * @author <a href="http://www.cucbc.com/">www.cucbc.com</a> 049 * @author <a href="mailto:juliusdavies@cucbc.com">juliusdavies@cucbc.com</a> 050 * @since 20-Nov-2006 051 */ 052 public class SSLServerSocketWrapper extends SSLServerSocket { 053 protected SSLServerSocket s; 054 protected SSL ssl; 055 protected SSLWrapperFactory wf; 056 057 public SSLServerSocketWrapper(SSLServerSocket s, SSL ssl, 058 SSLWrapperFactory wf) 059 throws IOException { 060 super(); 061 this.s = s; 062 this.ssl = ssl; 063 this.wf = wf; 064 } 065 066 /* javax.net.ssl.SSLServerSocket */ 067 068 public Socket accept() throws IOException { 069 SSLSocket secureSocket = (SSLSocket) s.accept(); 070 071 // Do the commons-ssl usual housekeeping for every socket: 072 ssl.doPreConnectSocketStuff(secureSocket); 073 InetAddress addr = secureSocket.getInetAddress(); 074 String hostName = addr.getHostName(); 075 ssl.doPostConnectSocketStuff(secureSocket, hostName); 076 077 return wf.wrap(secureSocket); 078 } 079 080 public String[] getEnabledCipherSuites() { 081 return s.getEnabledCipherSuites(); 082 } 083 084 public String[] getEnabledProtocols() { return s.getEnabledProtocols(); } 085 086 public boolean getEnableSessionCreation() { 087 return s.getEnableSessionCreation(); 088 } 089 090 public boolean getNeedClientAuth() { return s.getNeedClientAuth(); } 091 092 public String[] getSupportedCipherSuites() { 093 return s.getSupportedCipherSuites(); 094 } 095 096 public String[] getSupportedProtocols() { return s.getSupportedProtocols(); } 097 098 public boolean getUseClientMode() { return s.getUseClientMode(); } 099 100 public boolean getWantClientAuth() { return s.getWantClientAuth(); } 101 102 public void setEnabledCipherSuites(String[] suites) { 103 s.setEnabledCipherSuites(suites); 104 } 105 106 public void setEnabledProtocols(String[] protocols) { 107 s.setEnabledProtocols(protocols); 108 } 109 110 public void setEnableSessionCreation(boolean flag) { 111 s.setEnableSessionCreation(flag); 112 } 113 114 public void setNeedClientAuth(boolean need) { 115 s.setNeedClientAuth(need); 116 } 117 118 public void setUseClientMode(boolean use) { s.setUseClientMode(use); } 119 120 public void setWantClientAuth(boolean want) { 121 s.setWantClientAuth(want); 122 } 123 124 /* java.net.Socket */ 125 126 public void bind(SocketAddress endpoint) throws IOException { 127 s.bind(endpoint); 128 } 129 130 public void bind(SocketAddress ep, int bl) throws IOException { 131 s.bind(ep, bl); 132 } 133 134 public void close() throws IOException { s.close(); } 135 136 public ServerSocketChannel getChannel() { return s.getChannel(); } 137 138 public InetAddress getInetAddress() { return s.getInetAddress(); } 139 140 public int getLocalPort() { return s.getLocalPort(); } 141 142 public SocketAddress getLocalSocketAddress() { 143 return s.getLocalSocketAddress(); 144 } 145 146 public int getReceiveBufferSize() throws SocketException { 147 return s.getReceiveBufferSize(); 148 } 149 150 public boolean getReuseAddress() throws SocketException { 151 return s.getReuseAddress(); 152 } 153 154 public int getSoTimeout() throws IOException { return s.getSoTimeout(); } 155 156 public boolean isBound() { return s.isBound(); } 157 158 public boolean isClosed() { return s.isClosed(); } 159 160 public void setReceiveBufferSize(int size) throws SocketException { 161 s.setReceiveBufferSize(size); 162 } 163 164 public void setReuseAddress(boolean on) throws SocketException { 165 s.setReuseAddress(on); 166 } 167 168 public void setSoTimeout(int timeout) throws SocketException { 169 s.setSoTimeout(timeout); 170 } 171 172 public String toString() { return s.toString(); } 173 174 /* Java 1.5 175 public void setPerformancePreferences(int connectionTime, int latency, int bandwidth) 176 { 177 s.setPerformancePreferences( connectionTime, latency, bandwidth ); 178 } 179 */ 180 181 182 }