117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair/* 217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * Copyright 2007 the original author or authors. 317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * 417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * Licensed under the Apache License, Version 2.0 (the "License"); 517f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * you may not use this file except in compliance with the License. 617f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * You may obtain a copy of the License at 717f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * 817f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * http://www.apache.org/licenses/LICENSE-2.0 917f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * 1017f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * Unless required by applicable law or agreed to in writing, software 1117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * distributed under the License is distributed on an "AS IS" BASIS, 1217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * See the License for the specific language governing permissions and 1417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * limitations under the License. 1517f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair */ 1617f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismairpackage org.mockftpserver.core.socket; 1717f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair 1817f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismairimport java.io.IOException; 1917f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismairimport java.net.ServerSocket; 2017f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismairimport java.net.Socket; 2117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismairimport java.net.SocketTimeoutException; 2217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair 2317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair/** 2417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * Test (fake) subclass of ServerSocket that performs no network access and allows setting the 2517f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * Socket returned by accept(), and the local port for the ServerSocket. 2617f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * 2717f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * @version $Revision$ - $Date$ 2817f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * 2917f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * @author Chris Mair 3017f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair */ 3117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismairpublic class StubServerSocket extends ServerSocket { 3217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair private int localPort; 3317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair private Socket socket; 3417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair 3517f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair /** 3617f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * Construct a new instance with the specified local port. 3717f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * @param localPort - the local port to be returned from getLocalPort() 3817f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * @throws IOException 3917f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair */ 4017f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair public StubServerSocket(int localPort) throws IOException { 4117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair this(localPort, null); 4217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair } 4317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair 4417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair /** 4517f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * Construct a new instance with specified local port and accept() socket. 4617f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * @param localPort - the local port to be returned from getLocalPort() 4717f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * @param socket - the socket to be returned from accept(); if null, then accept() throws SocketTimeoutException. 4817f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * @throws IOException 4917f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair */ 5017f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair public StubServerSocket(int localPort, Socket socket) throws IOException { 5117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair super(0); 5217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair this.localPort = localPort; 5317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair this.socket = socket; 5417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair } 5517f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair 5617f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair /** 5717f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * Return the predefined local port 5817f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * @see java.net.ServerSocket#getLocalPort() 5917f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair */ 6017f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair public int getLocalPort() { 6117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair return localPort; 6217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair } 6317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair 6417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair /** 6517f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * If a socket was specified on the constructor, then return that; otherwise, throw a SocketTimeoutException. 6617f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * @see java.net.ServerSocket#accept() 6717f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair */ 6817f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair public Socket accept() throws IOException { 6917f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair if (socket != null) { 7017f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair return socket; 7117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair } 7217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair throw new SocketTimeoutException(); 7317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair } 7417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair} 75