Home | History | Annotate | Download | only in jsse
      1 /*
      2  *  Licensed to the Apache Software Foundation (ASF) under one or more
      3  *  contributor license agreements.  See the NOTICE file distributed with
      4  *  this work for additional information regarding copyright ownership.
      5  *  The ASF licenses this file to You under the Apache License, Version 2.0
      6  *  (the "License"); you may not use this file except in compliance with
      7  *  the License.  You may obtain a copy of the License at
      8  *
      9  *     http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  *  Unless required by applicable law or agreed to in writing, software
     12  *  distributed under the License is distributed on an "AS IS" BASIS,
     13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  *  See the License for the specific language governing permissions and
     15  *  limitations under the License.
     16  */
     17 
     18 package org.apache.harmony.xnet.provider.jsse;
     19 
     20 import java.io.IOException;
     21 import java.net.InetAddress;
     22 import java.net.Socket;
     23 import java.net.SocketAddress;
     24 import java.net.SocketException;
     25 
     26 /**
     27  * This class wraps the SSL fuctionality over existing conneted socket.
     28  */
     29 public class SSLSocketWrapper extends SSLSocketImpl {
     30 
     31     private final Socket socket;
     32     private final boolean autoClose;
     33 
     34     protected SSLSocketWrapper(Socket socket, boolean autoClose, SSLParametersImpl sslParameters) throws IOException {
     35         super(sslParameters);
     36         if (!socket.isConnected()) {
     37             throw new SocketException("Socket is not connected.");
     38         }
     39         this.socket = socket;
     40         this.autoClose = autoClose;
     41         init();
     42     }
     43 
     44     @Override
     45     protected void initTransportLayer() throws IOException {
     46         input = socket.getInputStream();
     47         output = socket.getOutputStream();
     48     }
     49 
     50     @Override
     51     protected void closeTransportLayer() throws IOException {
     52         if (autoClose && (input != null)) {
     53             socket.close();
     54             input.close();
     55             output.close();
     56         }
     57     }
     58 
     59     // ------------------- Wrapping method implementations ---------------
     60 
     61     @Override
     62     public void connect(SocketAddress sockaddr, int timeout)
     63         throws IOException {
     64         throw new IOException("Underlying socket is already connected.");
     65     }
     66 
     67     @Override
     68     public void connect(SocketAddress sockaddr) throws IOException {
     69         throw new IOException("Underlying socket is already connected.");
     70     }
     71 
     72     @Override
     73     public void bind(SocketAddress sockaddr) throws IOException {
     74         throw new IOException("Underlying socket is already connected.");
     75     }
     76 
     77     @Override
     78     public SocketAddress getRemoteSocketAddress() {
     79         return socket.getRemoteSocketAddress();
     80     }
     81 
     82     @Override
     83     public SocketAddress getLocalSocketAddress() {
     84         return socket.getLocalSocketAddress();
     85     }
     86 
     87     @Override
     88     public InetAddress getLocalAddress() {
     89         return socket.getLocalAddress();
     90     }
     91 
     92     @Override
     93     public InetAddress getInetAddress() {
     94         return socket.getInetAddress();
     95     }
     96 
     97     @Override
     98     public String toString() {
     99         return "SSL socket over " + socket.toString();
    100     }
    101 
    102     @Override
    103     public void setSoLinger(boolean on, int linger) throws SocketException {
    104         socket.setSoLinger(on, linger);
    105     }
    106 
    107     @Override
    108     public void setTcpNoDelay(boolean on) throws SocketException {
    109         socket.setTcpNoDelay(on);
    110     }
    111 
    112     @Override
    113     public void setReuseAddress(boolean on) throws SocketException {
    114         socket.setReuseAddress(on);
    115     }
    116 
    117     @Override
    118     public void setKeepAlive(boolean on) throws SocketException {
    119         socket.setKeepAlive(on);
    120     }
    121 
    122     @Override
    123     public void setTrafficClass(int tos) throws SocketException {
    124         socket.setTrafficClass(tos);
    125     }
    126 
    127     @Override
    128     public void setSoTimeout(int to) throws SocketException {
    129         socket.setSoTimeout(to);
    130     }
    131 
    132     @Override
    133     public void setSendBufferSize(int size) throws SocketException {
    134         socket.setSendBufferSize(size);
    135     }
    136 
    137     @Override
    138     public void setReceiveBufferSize(int size) throws SocketException {
    139         socket.setReceiveBufferSize(size);
    140     }
    141 
    142     @Override
    143     public boolean getTcpNoDelay() throws SocketException {
    144         return socket.getTcpNoDelay();
    145     }
    146 
    147     @Override
    148     public boolean getReuseAddress() throws SocketException {
    149         return socket.getReuseAddress();
    150     }
    151 
    152     @Override
    153     public boolean getOOBInline() throws SocketException {
    154         return socket.getOOBInline();
    155     }
    156 
    157     @Override
    158     public boolean getKeepAlive() throws SocketException {
    159         return socket.getKeepAlive();
    160     }
    161 
    162     @Override
    163     public int getTrafficClass() throws SocketException {
    164         return socket.getTrafficClass();
    165     }
    166 
    167     @Override
    168     public int getSoTimeout() throws SocketException {
    169         return socket.getSoTimeout();
    170     }
    171 
    172     @Override
    173     public int getSoLinger() throws SocketException {
    174         return socket.getSoLinger();
    175     }
    176 
    177     @Override
    178     public int getSendBufferSize() throws SocketException {
    179         return socket.getSendBufferSize();
    180     }
    181 
    182     @Override
    183     public int getReceiveBufferSize() throws SocketException {
    184         return socket.getReceiveBufferSize();
    185     }
    186 
    187     @Override
    188     public boolean isConnected() {
    189         return socket.isConnected();
    190     }
    191 
    192     @Override
    193     public boolean isClosed() {
    194         return socket.isClosed();
    195     }
    196 
    197     @Override
    198     public boolean isBound() {
    199         return socket.isBound();
    200     }
    201 
    202     @Override
    203     public boolean isOutputShutdown() {
    204         return socket.isOutputShutdown();
    205     }
    206 
    207     @Override
    208     public boolean isInputShutdown() {
    209         return socket.isInputShutdown();
    210     }
    211 
    212     @Override
    213     public int getPort() {
    214         return socket.getPort();
    215     }
    216 
    217     @Override
    218     public int getLocalPort() {
    219         return socket.getLocalPort();
    220     }
    221 
    222     // -------------------------------------------------------------------
    223 
    224 }
    225 
    226