1e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes/* 2e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more 3e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * contributor license agreements. See the NOTICE file distributed with 4e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * this work for additional information regarding copyright ownership. 5e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0 6e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * (the "License"); you may not use this file except in compliance with 7e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * the License. You may obtain a copy of the License at 8e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * 9e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 10e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * 11e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * Unless required by applicable law or agreed to in writing, software 12e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 13e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * See the License for the specific language governing permissions and 15e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * limitations under the License. 16e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes */ 17e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 18e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughespackage tests.support; 19e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 20e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport java.io.IOException; 21e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport java.net.ServerSocket; 22e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport java.net.Socket; 23e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 24e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes/** 25e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * This class implements the Support_ServerSocket interface using java.net 26e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * Serversockets 27e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes */ 28e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 29e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughespublic class Support_HttpServerSocket implements Support_ServerSocket { 308d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath private ServerSocket instance = null; 31e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 328d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath private int port = -1; 33e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 348d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath private int timeout = 8000; 35e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 368d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath /** 378d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath * Blocks until a connection is made, or the socket times out. 388d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath * 398d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath * @see tests.support.Support_ServerSocket#accept() 408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath */ 418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath public Support_Socket accept() throws IOException { 428d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath if (port == -1) { 43e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes return null; 44e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 458d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath if (instance == null) { 46e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes return null; 47e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 488d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath instance.setSoTimeout(timeout); 498d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath Socket s = instance.accept(); 508d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath return new Support_HttpSocket(s); 518d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 52e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 538d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath /** 548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath * @see tests.support.Support_ServerSocket#setTimeout(int) Sets the 558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath * timeout for the server. 568d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath */ 578d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath public void setTimeout(int timeout) { 588d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath this.timeout = timeout; 598d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 60e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 618d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath /** 628d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath * @see tests.support.Support_ServerSocket#setPort(int) 638d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath */ 648d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath public void setPort(int port) { 658d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath this.port = port; 668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 67e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath public void open() throws IOException { 698d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath instance = new ServerSocket(port); 708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 71e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath /** 738d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath * @see tests.support.Support_ServerSocket#close() 748d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath */ 758d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath public void close() throws IOException { 768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath if (instance != null) { 77e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes instance.close(); 78e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 80e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 81e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes} 82