001    /*
002     * $HeadURL: http://juliusdavies.ca/svn/not-yet-commons-ssl/tags/commons-ssl-0.3.11/src/java/org/apache/commons/ssl/SSLSocketWrapper.java $
003     * $Revision: 155 $
004     * $Date: 2009-09-17 14:00:58 -0700 (Thu, 17 Sep 2009) $
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.HandshakeCompletedListener;
035    import javax.net.ssl.SSLSession;
036    import javax.net.ssl.SSLSocket;
037    import java.io.IOException;
038    import java.io.InputStream;
039    import java.io.OutputStream;
040    import java.net.InetAddress;
041    import java.net.Socket;
042    import java.net.SocketAddress;
043    import java.net.SocketException;
044    import java.nio.channels.SocketChannel;
045    
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 16-Aug-2006
051     */
052    public class SSLSocketWrapper extends SSLSocket {
053        protected Socket s;
054    
055        public SSLSocketWrapper(Socket s) {
056            this.s = s;
057        }
058    
059        /* javax.net.ssl.SSLSocket */
060    
061        public void addHandshakeCompletedListener(HandshakeCompletedListener hcl) {
062            if (s instanceof SSLSocket) {
063                ((SSLSocket) s).addHandshakeCompletedListener(hcl);
064            }
065        }
066    
067        public void removeHandshakeCompletedListener(HandshakeCompletedListener hcl) {
068            if (s instanceof SSLSocket) {
069                ((SSLSocket) s).removeHandshakeCompletedListener(hcl);
070            }
071        }
072    
073        public String[] getSupportedCipherSuites() {
074            if (s instanceof SSLSocket) {
075                return ((SSLSocket) s).getSupportedCipherSuites();
076            } else {
077                return null;
078            }
079        }
080    
081        public boolean getEnableSessionCreation() {
082            if (s instanceof SSLSocket) {
083                return ((SSLSocket) s).getEnableSessionCreation();
084            } else {
085                return false;
086            }
087        }
088    
089        public String[] getEnabledCipherSuites() {
090            if (s instanceof SSLSocket) {
091                return ((SSLSocket) s).getEnabledCipherSuites();
092            } else {
093                return null;
094            }
095        }
096    
097        public String[] getSupportedProtocols() {
098            if (s instanceof SSLSocket) {
099                return ((SSLSocket) s).getSupportedProtocols();
100            } else {
101                return null;
102            }
103        }
104    
105        public String[] getEnabledProtocols() {
106            if (s instanceof SSLSocket) {
107                return ((SSLSocket) s).getEnabledProtocols();
108            } else {
109                return null;
110            }
111        }
112    
113        public SSLSession getSession() {
114            if (s instanceof SSLSocket) {
115                return ((SSLSocket) s).getSession();
116            } else {
117                return null;
118            }
119        }
120    
121        public boolean getUseClientMode() {
122            if (s instanceof SSLSocket) {
123                return ((SSLSocket) s).getUseClientMode();
124            } else {
125                return false;
126            }
127        }
128    
129        public boolean getNeedClientAuth() {
130            if (s instanceof SSLSocket) {
131                return ((SSLSocket) s).getNeedClientAuth();
132            } else {
133                return false;
134            }
135        }
136    
137        public boolean getWantClientAuth() {
138            if (s instanceof SSLSocket) {
139                return ((SSLSocket) s).getWantClientAuth();
140            } else {
141                return false;
142            }
143        }
144    
145        public void setEnabledCipherSuites(String[] cs) {
146            if (s instanceof SSLSocket) {
147                ((SSLSocket) s).setEnabledCipherSuites(cs);
148            }
149        }
150    
151        public void setEnabledProtocols(String[] ep) {
152            if (s instanceof SSLSocket) {
153                ((SSLSocket) s).setEnabledProtocols(ep);
154            }
155        }
156    
157        public void startHandshake() throws IOException {
158            if (s instanceof SSLSocket) {
159                ((SSLSocket) s).startHandshake();
160            }
161        }
162    
163        public void setUseClientMode(boolean b) {
164            if (s instanceof SSLSocket) {
165                ((SSLSocket) s).setUseClientMode(b);
166            }
167        }
168    
169        public void setNeedClientAuth(boolean b) {
170            if (s instanceof SSLSocket) {
171                ((SSLSocket) s).setNeedClientAuth(b);
172            }
173        }
174    
175        public void setWantClientAuth(boolean b) {
176            if (s instanceof SSLSocket) {
177                ((SSLSocket) s).setWantClientAuth(b);
178            }
179        }
180    
181        public void setEnableSessionCreation(boolean b) {
182            if (s instanceof SSLSocket) {
183                ((SSLSocket) s).setEnableSessionCreation(b);
184            }
185        }
186    
187        /* java.net.Socket */
188    
189        public SocketChannel getChannel() {
190            return s.getChannel();
191        }
192    
193        public InetAddress getInetAddress() {
194            return s.getInetAddress();
195        }
196    
197        public boolean getKeepAlive() throws SocketException {
198            return s.getKeepAlive();
199        }
200    
201        public InetAddress getLocalAddress() {
202            return s.getLocalAddress();
203        }
204    
205        public int getLocalPort() {
206            return s.getLocalPort();
207        }
208    
209        public SocketAddress getLocalSocketAddress() {
210            return s.getLocalSocketAddress();
211        }
212    
213        public boolean getOOBInline() throws SocketException {
214            return s.getOOBInline();
215        }
216    
217        public int getPort() {
218            return s.getPort();
219        }
220    
221        public int getReceiveBufferSize() throws SocketException {
222            return s.getReceiveBufferSize();
223        }
224    
225        public SocketAddress getRemoteSocketAddress() {
226            return s.getRemoteSocketAddress();
227        }
228    
229        public boolean getReuseAddress() throws SocketException {
230            return s.getReuseAddress();
231        }
232    
233        public int getSendBufferSize() throws SocketException {
234            return s.getSendBufferSize();
235        }
236    
237        public int getSoLinger() throws SocketException {
238            return s.getSoLinger();
239        }
240    
241        public int getSoTimeout() throws SocketException {
242            return s.getSoTimeout();
243        }
244    
245        public boolean getTcpNoDelay() throws SocketException {
246            return s.getTcpNoDelay();
247        }
248    
249        public int getTrafficClass() throws SocketException {
250            return s.getTrafficClass();
251        }
252    
253        public boolean isBound() {
254            return s.isBound();
255        }
256    
257        public boolean isClosed() {
258            return s.isClosed();
259        }
260    
261        public boolean isConnected() {
262            return s.isConnected();
263        }
264    
265        public boolean isInputShutdown() {
266            return s.isInputShutdown();
267        }
268    
269        public boolean isOutputShutdown() {
270            return s.isOutputShutdown();
271        }
272    
273        public void sendUrgentData(int data) throws IOException {
274            s.sendUrgentData(data);
275        }
276    
277        public void setKeepAlive(boolean on) throws SocketException {
278            s.setKeepAlive(on);
279        }
280    
281        public void setOOBInline(boolean on) throws SocketException {
282            s.setOOBInline(on);
283        }
284    
285        public void setReceiveBufferSize(int size) throws SocketException {
286            s.setReceiveBufferSize(size);
287        }
288    
289        public void setReuseAddress(boolean on) throws SocketException {
290            s.setReuseAddress(on);
291        }
292    
293        public void setSendBufferSize(int size) throws SocketException {
294            s.setSendBufferSize(size);
295        }
296    
297        public void setSoLinger(boolean on, int l) throws SocketException {
298            s.setSoLinger(on, l);
299        }
300    
301        public void setSoTimeout(int timeout) throws SocketException {
302            s.setSoTimeout(timeout);
303        }
304    
305        public void setTcpNoDelay(boolean on) throws SocketException {
306            s.setTcpNoDelay(on);
307        }
308    
309        public void setTrafficClass(int tc) throws SocketException {
310            s.setTrafficClass(tc);
311        }
312    
313        public void shutdownInput() throws IOException {
314            s.shutdownInput();
315        }
316    
317        public void shutdownOutput() throws IOException {
318            s.shutdownOutput();
319        }
320    
321        public String toString() {
322            return s.toString();
323        }
324    
325        /*  Java 1.5
326         public void setPerformancePreferences(int connectionTime, int latency, int bandwidth)
327         {
328             s.setPerformancePreferences( connectionTime, latency, bandwidth );
329         }
330         */
331    
332        public void bind(SocketAddress bindpoint) throws IOException {
333            s.bind(bindpoint);
334        }
335    
336        public void close() throws IOException {
337            s.close();
338        }
339    
340        public void connect(SocketAddress endpoint) throws IOException {
341            s.connect(endpoint);
342        }
343    
344        public void connect(SocketAddress endpoint, int timeout) throws IOException {
345            s.connect(endpoint, timeout);
346        }
347    
348        public InputStream getInputStream() throws IOException {
349            return s.getInputStream();
350        }
351    
352        public OutputStream getOutputStream() throws IOException {
353            return s.getOutputStream();
354        }
355    
356    }