All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.cybergarage.http.HTTPServer Maven / Gradle / Ivy

There is a newer version: 2.6.0
Show newest version
/******************************************************************
*
*	CyberHTTP for Java
*
*	Copyright (C) Satoshi Konno 2002-2003
*
*	File: HTTPServer.java
*
*	Revision;
*
*	12/12/02
*		- first revision.
*	10/20/03
*		- Improved the HTTP server using multithreading.
*	08/27/04
*		- Changed accept() to set a default timeout, HTTP.DEFAULT_TIMEOUT, to the socket.
*	
******************************************************************/

package org.cybergarage.http;

import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

import org.cybergarage.util.Debug;
import org.cybergarage.util.ListenerList;

/**
 * 
 * This class identifies an HTTP over TCP server
* The server must be initialized iether by the {@link HTTPServer#open(InetAddress, int)} or the {@link HTTPServer#open(String, int)} method.
* Optionally a set of {@link HTTPRequestListener} may be set
* The server then can be started or stopped by the method {@link HTTPServer#start()} and {@link HTTPServer#stop()} * * @author Satoshi "skonno" Konno * @author Stefano "Kismet" Lenzi * @version 1.8 * */ public class HTTPServer implements Runnable { //////////////////////////////////////////////// // Constants //////////////////////////////////////////////// public final static String NAME = "CyberHTTP"; public final static String VERSION = "1.0"; public final static int DEFAULT_PORT = 80; /** * Default timeout connection for HTTP comunication * @since 1.8 */ // I2P fix //public final static int DEFAULT_TIMEOUT = DEFAULT_PORT * 1000; public final static int DEFAULT_TIMEOUT = 10 * 1000; public static String getName() { String osName = System.getProperty("os.name"); String osVer = System.getProperty("os.version"); return osName + "/" + osVer + " " + NAME + "/" + VERSION; } //////////////////////////////////////////////// // Constructor //////////////////////////////////////////////// public HTTPServer() { serverSock = null; } //////////////////////////////////////////////// // ServerSocket //////////////////////////////////////////////// private ServerSocket serverSock = null; private InetAddress bindAddr = null; private int bindPort = 0; /** * Store the current TCP timeout value * The variable should be accessed by getter and setter metho */ protected int timeout = DEFAULT_TIMEOUT; public ServerSocket getServerSock() { return serverSock; } public String getBindAddress() { if (bindAddr == null) return ""; return bindAddr.toString(); } public int getBindPort() { return bindPort; } //////////////////////////////////////////////// // open/close //////////////////////////////////////////////// /** * Get the current socket timeout * @since 1.8 */ public synchronized int getTimeout() { return timeout; } /** * Set the current socket timeout * @param timeout * @since 1.8 */ public synchronized void setTimeout(int timeout) { this.timeout = timeout; } public boolean open(InetAddress addr,int port){ if (serverSock != null) return true; try { serverSock = new ServerSocket(bindPort, 0, bindAddr); }catch (IOException e) { return false; } return true; } public boolean open(String addr, int port) { if (serverSock != null) return true; try { bindAddr = InetAddress.getByName(addr); bindPort = port; serverSock = new ServerSocket(bindPort, 0, bindAddr); } catch (IOException e) { Debug.warning("HTTP server open failed " + addr + " " + port, e); return false; } return true; } public boolean close() { if (serverSock == null) return true; try { serverSock.close(); serverSock = null; bindAddr = null; bindPort = 0; } catch (Exception e) { Debug.warning(e); return false; } return true; } public Socket accept() { if (serverSock == null) return null; try { Socket sock = serverSock.accept(); sock.setSoTimeout(getTimeout()); return sock; } catch (Exception e) { return null; } } public boolean isOpened() { return (serverSock != null) ? true : false; } //////////////////////////////////////////////// // httpRequest //////////////////////////////////////////////// private ListenerList httpRequestListenerList = new ListenerList(); public void addRequestListener(HTTPRequestListener listener) { httpRequestListenerList.add(listener); } public void removeRequestListener(HTTPRequestListener listener) { httpRequestListenerList.remove(listener); } public void performRequestListener(HTTPRequest httpReq) { int listenerSize = httpRequestListenerList.size(); for (int n=0; n




© 2015 - 2024 Weber Informatics LLC | Privacy Policy