10f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann/*******************************************************************************
2398ee59bebad6835dab57b60157eff16d511709eMarc R. Hoffmann * Copyright (c) 2009, 2015 Mountainminds GmbH & Co. KG and Contributors
30f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann * All rights reserved. This program and the accompanying materials
40f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann * are made available under the terms of the Eclipse Public License v1.0
50f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann * which accompanies this distribution, and is available at
60f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann * http://www.eclipse.org/legal/epl-v10.html
70f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann *
80f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann * Contributors:
90f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann *    Marc R. Hoffmann - initial API and implementation
100f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann *
110f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann *******************************************************************************/
1282608019c1e03552fc80df7f70e7f7c5270a0637Marc R. Hoffmannpackage org.jacoco.agent.rt.internal.output;
130f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
140f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmannimport java.io.IOException;
150f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmannimport java.io.InputStream;
160f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmannimport java.io.InterruptedIOException;
170f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmannimport java.io.OutputStream;
180f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmannimport java.net.InetAddress;
190f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmannimport java.net.Socket;
200f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmannimport java.net.SocketAddress;
210f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmannimport java.net.SocketException;
220f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmannimport java.net.SocketImpl;
230f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmannimport java.nio.channels.SocketChannel;
240f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmannimport java.util.Queue;
250f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmannimport java.util.concurrent.ConcurrentLinkedQueue;
260f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
270f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann/**
2882608019c1e03552fc80df7f70e7f7c5270a0637Marc R. Hoffmann * Simulates two connected {@link Socket} objects. No physical connection is
2982608019c1e03552fc80df7f70e7f7c5270a0637Marc R. Hoffmann * established for this. The behavior includes the (inconsistent) exception
300f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann * messages have been derived from Sun JDK 1.5.0_18-b02.
310f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann */
320f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmannpublic class MockSocketConnection {
330f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
340f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann	private final MockSocket socketA;
350f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
360f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann	private final MockSocket socketB;
370f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
380f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann	public MockSocketConnection() throws SocketException {
390f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		socketA = new MockSocket();
400f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		socketB = new MockSocket();
410f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		socketA.connect(socketB);
420f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann	}
430f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
440f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann	public Socket getSocketA() {
450f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		return socketA;
460f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann	}
470f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
480f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann	public Socket getSocketB() {
490f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		return socketB;
500f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann	}
510f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
520f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann	private class MockSocket extends Socket {
530f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
540f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		private MockSocket other;
550f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
560f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		private boolean closed;
570f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
580f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		private final Queue<Byte> buffer = new ConcurrentLinkedQueue<Byte>();
590f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
600f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		private final OutputStream out = new OutputStream() {
610f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
620f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			@Override
630f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			public void write(int b) throws IOException {
640f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann				if (closed) {
650f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann					throw new SocketException("Socket closed");
660f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann				}
670f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann				synchronized (other.buffer) {
680f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann					other.buffer.add(Byte.valueOf((byte) b));
690f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann					other.buffer.notifyAll();
700f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann				}
710f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			}
720f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		};
730f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
740f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		private final InputStream in = new InputStream() {
750f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
760f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			@Override
770f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			public int read() throws IOException {
780f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann				synchronized (buffer) {
790f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann					try {
800f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann						while (true) {
810f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann							if (closed) {
820f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann								throw new SocketException("socket closed");
830f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann							}
840f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann							if (other.closed) {
850f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann								return -1;
860f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann							}
870f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann							final Byte b = buffer.poll();
880f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann							if (b != null) {
890f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann								return 0xff & b.intValue();
900f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann							}
910f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann							buffer.wait();
920f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann						}
930f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann					} catch (InterruptedException e) {
940f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann						throw new InterruptedIOException();
950f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann					}
960f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann				}
970f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			}
980f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
990f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			@Override
1000f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			public int available() throws IOException {
1010f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann				return buffer.size();
1020f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			}
1030f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
1040f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		};
1050f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
1060f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public MockSocket() throws SocketException {
1070f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			super((SocketImpl) null);
1080f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			closed = false;
1090f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
1100f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
1110f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		void connect(MockSocket other) {
1120f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			this.other = other;
1130f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			other.other = this;
1140f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
1150f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
1160f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		// socket methods with mocking behavior:
1170f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
1180f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
1190f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public OutputStream getOutputStream() throws IOException {
1200f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			if (closed) {
1210f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann				throw new SocketException("Socket is closed");
1220f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			}
1230f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			return out;
1240f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
1250f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
1260f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
1270f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public InputStream getInputStream() throws IOException {
1280f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			if (closed) {
1290f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann				throw new SocketException("Socket is closed");
1300f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			}
1310f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			return in;
1320f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
1330f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
1340f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
135fd99e33be7ac88af01cd22b4cfd4b25be9663291Marc R. Hoffmann		public void close() throws IOException {
1360f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			closed = true;
1370f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			synchronized (buffer) {
1380f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann				buffer.notifyAll();
1390f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			}
1400f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			synchronized (other.buffer) {
1410f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann				other.buffer.notifyAll();
1420f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			}
1430f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
1440f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
1450f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
1460f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public boolean isClosed() {
1470f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			return closed;
1480f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
1490f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
1500f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		// unsupported socket methods:
1510f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
1520f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
1530f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public void bind(SocketAddress bindpoint) throws IOException {
1540f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			throw new AssertionError();
1550f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
1560f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
1570f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
1580f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public void connect(SocketAddress endpoint, int timeout)
1590f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann				throws IOException {
1600f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			throw new AssertionError();
1610f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
1620f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
1630f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
1640f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public void connect(SocketAddress endpoint) throws IOException {
1650f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			throw new AssertionError();
1660f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
1670f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
1680f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
1690f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public SocketChannel getChannel() {
1700f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			throw new AssertionError();
1710f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
1720f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
1730f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
1740f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public InetAddress getInetAddress() {
1750f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			throw new AssertionError();
1760f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
1770f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
1780f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
1790f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public boolean getKeepAlive() throws SocketException {
1800f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			throw new AssertionError();
1810f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
1820f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
1830f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
1840f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public InetAddress getLocalAddress() {
1850f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			throw new AssertionError();
1860f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
1870f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
1880f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
1890f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public int getLocalPort() {
1900f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			throw new AssertionError();
1910f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
1920f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
1930f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
1940f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public SocketAddress getLocalSocketAddress() {
1950f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			throw new AssertionError();
1960f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
1970f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
1980f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
1990f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public boolean getOOBInline() throws SocketException {
2000f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			throw new AssertionError();
2010f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
2020f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
2030f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
2040f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public int getPort() {
2050f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			throw new AssertionError();
2060f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
2070f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
2080f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
2090f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public synchronized int getReceiveBufferSize() throws SocketException {
2100f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			throw new AssertionError();
2110f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
2120f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
2130f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
2140f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public SocketAddress getRemoteSocketAddress() {
2150f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			throw new AssertionError();
2160f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
2170f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
2180f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
2190f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public boolean getReuseAddress() throws SocketException {
2200f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			throw new AssertionError();
2210f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
2220f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
2230f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
2240f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public synchronized int getSendBufferSize() throws SocketException {
2250f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			throw new AssertionError();
2260f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
2270f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
2280f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
2290f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public int getSoLinger() throws SocketException {
2300f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			throw new AssertionError();
2310f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
2320f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
2330f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
2340f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public synchronized int getSoTimeout() throws SocketException {
2350f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			throw new AssertionError();
2360f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
2370f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
2380f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
2390f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public boolean getTcpNoDelay() throws SocketException {
2400f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			throw new AssertionError();
2410f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
2420f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
2430f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
2440f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public int getTrafficClass() throws SocketException {
2450f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			throw new AssertionError();
2460f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
2470f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
2480f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
2490f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public boolean isBound() {
2500f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			throw new AssertionError();
2510f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
2520f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
2530f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
2540f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public boolean isConnected() {
2550f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			throw new AssertionError();
2560f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
2570f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
2580f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
2590f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public boolean isInputShutdown() {
2600f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			throw new AssertionError();
2610f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
2620f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
2630f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
2640f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public boolean isOutputShutdown() {
2650f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			throw new AssertionError();
2660f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
2670f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
2680f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
2690f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public void sendUrgentData(int data) throws IOException {
2700f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			throw new AssertionError();
2710f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
2720f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
2730f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
2740f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public void setKeepAlive(boolean on) throws SocketException {
2750f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			throw new AssertionError();
2760f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
2770f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
2780f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
2790f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public void setOOBInline(boolean on) throws SocketException {
2800f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			throw new AssertionError();
2810f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
2820f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
2830f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
2840f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public void setPerformancePreferences(int connectionTime, int latency,
2850f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann				int bandwidth) {
2860f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			throw new AssertionError();
2870f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
2880f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
2890f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
2900f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public synchronized void setReceiveBufferSize(int size)
2910f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann				throws SocketException {
2920f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			throw new AssertionError();
2930f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
2940f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
2950f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
2960f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public void setReuseAddress(boolean on) throws SocketException {
2970f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			throw new AssertionError();
2980f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
2990f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
3000f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
3010f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public synchronized void setSendBufferSize(int size)
3020f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann				throws SocketException {
3030f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			throw new AssertionError();
3040f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
3050f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
3060f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
3070f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public void setSoLinger(boolean on, int linger) throws SocketException {
3080f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			throw new AssertionError();
3090f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
3100f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
3110f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
3120f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public synchronized void setSoTimeout(int timeout)
3130f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann				throws SocketException {
3140f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			throw new AssertionError();
3150f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
3160f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
3170f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
3180f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public void setTcpNoDelay(boolean on) throws SocketException {
3190f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			throw new AssertionError();
3200f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
3210f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
3220f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
3230f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public void setTrafficClass(int tc) throws SocketException {
3240f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			throw new AssertionError();
3250f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
3260f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
3270f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
3280f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public void shutdownInput() throws IOException {
3290f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			throw new AssertionError();
3300f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
3310f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
3320f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		@Override
3330f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		public void shutdownOutput() throws IOException {
3340f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann			throw new AssertionError();
3350f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann		}
3360f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
3370f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann	}
3380f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann
3390f1cf840fa0deb0088e0d6c0bada2d20f62e2e9fMarc R. Hoffmann}
340