193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair/* 293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * Copyright 2007 the original author or authors. 393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * 493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * Licensed under the Apache License, Version 2.0 (the "License"); 593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * you may not use this file except in compliance with the License. 693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * You may obtain a copy of the License at 793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * 893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * http://www.apache.org/licenses/LICENSE-2.0 993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * 1093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * Unless required by applicable law or agreed to in writing, software 1193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * distributed under the License is distributed on an "AS IS" BASIS, 1293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * See the License for the specific language governing permissions and 1493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * limitations under the License. 1593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair */ 1693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismairpackage org.mockftpserver.core.socket; 1793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair 1893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismairimport java.io.IOException; 1993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismairimport java.net.ServerSocket; 2093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismairimport java.net.Socket; 2193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismairimport java.net.SocketTimeoutException; 2293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair 2393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair/** 2493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * Test (fake) subclass of ServerSocket that performs no network access and allows setting the 2593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * Socket returned by accept(), and the local port for the ServerSocket. 2693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * 274ca3386623ce60063f27955ad1b2b1b6cbba8b09chrismair * @version $Revision$ - $Date$ 2893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * 2993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * @author Chris Mair 3093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair */ 3193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismairpublic class StubServerSocket extends ServerSocket { 3293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair private int localPort; 3393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair private Socket socket; 3493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair 3593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair /** 3693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * Construct a new instance with the specified local port. 3793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * @param localPort - the local port to be returned from getLocalPort() 3893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * @throws IOException 3993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair */ 4093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair public StubServerSocket(int localPort) throws IOException { 4193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair this(localPort, null); 4293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair } 4393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair 4493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair /** 4593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * Construct a new instance with specified local port and accept() socket. 4693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * @param localPort - the local port to be returned from getLocalPort() 4793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * @param socket - the socket to be returned from accept(); if null, then accept() throws SocketTimeoutException. 4893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * @throws IOException 4993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair */ 5093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair public StubServerSocket(int localPort, Socket socket) throws IOException { 5193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair super(0); 5293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair this.localPort = localPort; 5393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair this.socket = socket; 5493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair } 5593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair 5693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair /** 5793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * Return the predefined local port 5893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * @see java.net.ServerSocket#getLocalPort() 5993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair */ 6093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair public int getLocalPort() { 6193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair return localPort; 6293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair } 6393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair 6493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair /** 6593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * If a socket was specified on the constructor, then return that; otherwise, throw a SocketTimeoutException. 6693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * @see java.net.ServerSocket#accept() 6793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair */ 6893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair public Socket accept() throws IOException { 6993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair if (socket != null) { 7093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair return socket; 7193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair } 7293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair throw new SocketTimeoutException(); 7393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair } 7493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair} 75