001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017:
018: /**
019: * @author Alexander Y. Kleymenov
020: * @version $Revision$
021: */package org.apache.harmony.xnet.provider.jsse;
022:
023: import java.io.IOException;
024: import java.net.InetAddress;
025: import java.net.Socket;
026: import java.net.SocketAddress;
027: import java.net.SocketException;
028:
029: /**
030: * This class wraps the SSL fuctionality over existing conneted socket.
031: */
032: public class SSLSocketWrapper extends SSLSocketImpl {
033:
034: private final Socket socket;
035: private final boolean autoClose;
036:
037: protected SSLSocketWrapper(Socket socket, boolean autoClose,
038: SSLParameters sslParameters) throws IOException {
039: super (sslParameters);
040: if (!socket.isConnected()) {
041: throw new SocketException("Socket is not connected.");
042: }
043: this .socket = socket;
044: this .autoClose = autoClose;
045: init();
046: }
047:
048: protected void initTransportLayer() throws IOException {
049: input = socket.getInputStream();
050: output = socket.getOutputStream();
051: }
052:
053: protected void closeTransportLayer() throws IOException {
054: if (autoClose && (input != null)) {
055: socket.close();
056: input.close();
057: output.close();
058: }
059: }
060:
061: // ------------------- Wrapping method implementations ---------------
062:
063: public void connect(SocketAddress sockaddr, int timeout)
064: throws IOException {
065: throw new IOException("Underlying socket is already connected.");
066: }
067:
068: public void connect(SocketAddress sockaddr) throws IOException {
069: throw new IOException("Underlying socket is already connected.");
070: }
071:
072: public void bind(SocketAddress sockaddr) throws IOException {
073: throw new IOException("Underlying socket is already connected.");
074: }
075:
076: public SocketAddress getRemoteSocketAddress() {
077: return socket.getRemoteSocketAddress();
078: }
079:
080: public SocketAddress getLocalSocketAddress() {
081: return socket.getLocalSocketAddress();
082: }
083:
084: public InetAddress getLocalAddress() {
085: return socket.getLocalAddress();
086: }
087:
088: public InetAddress getInetAddress() {
089: return socket.getInetAddress();
090: }
091:
092: public String toString() {
093: return "SSL socket over " + socket.toString();
094: }
095:
096: public void setSoLinger(boolean on, int linger)
097: throws SocketException {
098: socket.setSoLinger(on, linger);
099: }
100:
101: public void setTcpNoDelay(boolean on) throws SocketException {
102: socket.setTcpNoDelay(on);
103: }
104:
105: public void setReuseAddress(boolean on) throws SocketException {
106: socket.setReuseAddress(on);
107: }
108:
109: public void setKeepAlive(boolean on) throws SocketException {
110: socket.setKeepAlive(on);
111: }
112:
113: public void setTrafficClass(int tos) throws SocketException {
114: socket.setTrafficClass(tos);
115: }
116:
117: public void setSoTimeout(int to) throws SocketException {
118: socket.setSoTimeout(to);
119: }
120:
121: public void setSendBufferSize(int size) throws SocketException {
122: socket.setSendBufferSize(size);
123: }
124:
125: public void setReceiveBufferSize(int size) throws SocketException {
126: socket.setReceiveBufferSize(size);
127: }
128:
129: public boolean getTcpNoDelay() throws SocketException {
130: return socket.getTcpNoDelay();
131: }
132:
133: public boolean getReuseAddress() throws SocketException {
134: return socket.getReuseAddress();
135: }
136:
137: public boolean getOOBInline() throws SocketException {
138: return socket.getOOBInline();
139: }
140:
141: public boolean getKeepAlive() throws SocketException {
142: return socket.getKeepAlive();
143: }
144:
145: public int getTrafficClass() throws SocketException {
146: return socket.getTrafficClass();
147: }
148:
149: public int getSoTimeout() throws SocketException {
150: return socket.getSoTimeout();
151: }
152:
153: public int getSoLinger() throws SocketException {
154: return socket.getSoLinger();
155: }
156:
157: public int getSendBufferSize() throws SocketException {
158: return socket.getSendBufferSize();
159: }
160:
161: public int getReceiveBufferSize() throws SocketException {
162: return socket.getReceiveBufferSize();
163: }
164:
165: public boolean isConnected() {
166: return socket.isConnected();
167: }
168:
169: public boolean isClosed() {
170: return socket.isClosed();
171: }
172:
173: public boolean isBound() {
174: return socket.isBound();
175: }
176:
177: public boolean isOutputShutdown() {
178: return socket.isOutputShutdown();
179: }
180:
181: public boolean isInputShutdown() {
182: return socket.isInputShutdown();
183: }
184:
185: public int getPort() {
186: return socket.getPort();
187: }
188:
189: public int getLocalPort() {
190: return socket.getLocalPort();
191: }
192:
193: // -------------------------------------------------------------------
194:
195: }
|