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