w3c.model.tools.basicweb.Server

w3c.model.tools.basicweb.Server

/* basicweb.Server.java
 * $Id, $Date eric Exp $
 * (c) COPYRIGHT MIT and INRIA, 1997.
 * Please first read the full copyright statement in file COPYRIGHT.html
 *
 * Caution: emits shower of sparks.
 */

package w3c.model.tools.basicweb;

import java.io.*;
import java.net.Socket;
import java.util.Properties;
import w3c.model.www.pep.PEPAgent;
import w3c.model.www.pep.PEPServer;
import w3c.model.www.pep.altlib.*;

public class Server extends BaseServer

    static final int DEFAULT_PORT = 8888;
    Properties properties;

    Server(int port, Properties properties) throws IOException{
    	super(port);
	this.properties = properties;
	System.out.println("<!- server port: " + port + " ->");
	System.out.println("<!- server root: "" + properties.getProperty(prop_SERVER_ROOT) + "/" ->");
	super.serve();
    }

    Request makeRequest (Socket socket, InputStream in, OutputStream out, PEPAgent pepAgent, ErrorContext errorContext) {
	return  Request(socket, in, null, pepAgent, errorContext);
    }

    void prepPEP () throwsHttpParserException  HTTPException{
	pepAgent =  PEPServer();
	/* create and initialize optional AccessCounter */
	w3c.model.www.pep.extensions.accessCounter.Server accCounterServer =  w3c.model.www.pep.extensions.accessCounter.Server();
	accCounterServer.initialize(pepAgent, false);
	pepAgent.addUrlExtension(accCounterServer, "/countable/*");
	pepAgent.addUrlExtension(accCounterServer, "/metered/*");

	/* create and initialize required EscapeBody */
	w3c.model.www.pep.extensions.escapeBody.Server escapeServer =  w3c.model.www.pep.extensions.escapeBody.Server();
	escapeServer.initialize(pepAgent, true);
	pepAgent.addUrlExtension(escapeServer, "/escaped/*");
	/* compensate for proxie's ignorance of accessCounter */
	pepAgent.addUrlExtension(escapeServer, "/countable/escaped/*");
	pepAgent.addUrlExtension(escapeServer, "/metered/escaped/*");

	/* emulate binary HTTP */
	w3c.model.www.pep.extensions.escapeMessage.Server binaryServer =  w3c.model.www.pep.extensions.escapeMessage.Server();
	binaryServer.initialize(pepAgent, false);
	/* would be addAlwaysExtension(binaryServer) but needs URL for C-PEP-INFO */
//	pepAgent.addUrlExtension(binaryServer, "/*");
    }

    void preServe (Request request) {
	request.mapURI("/", properties.getProperty(prop_SERVER_ROOT) + "/");
    }

    public static void main (String args[]) throws IOException{
	int port = DEFAULT_PORT;
	Properties properties = System.getProperties();
	String root = properties.getProperty("user.dir");
	for (int i = 0 ; i < args.length ; i++)) {
	    if ("-port".equals(args[i]))) {
		try {
		    port = Integer.parseInt(args[++i]) ;
		} catch (NumberFormatException ex)) {
		    System.out.println("invalid port number ["+args[i]+"]");
		     System.exit (1) ;
		}
	    }elseif ("-root".equals(args[i]))) {
		root = args[++i];
		System.out.println("new root:" + root);
	    }
	}
	properties.put(prop_SERVER_ROOT, root);
	 Server(port, properties);
    }