w3c.model.tools.basicweb.Client

w3c.model.tools.basicweb.Client

/* basicweb.Client.java
 * $Id, $Date eric Exp $
 * (c) COPYRIGHT MIT and INRIA, 1997.
 * Please first read the full copyright statement in file COPYRIGHT.html
 *
 * Please help anthropomorphised code
 * maintain its self-respect.
 */

/*
The basic client generates http requests from command line arguments and sends them to a server. The reply is thrown away.

*/
package w3c.model.tools.basicweb;

import java.io.*;
import java.net.*;
import w3c.model.www.pep.PEPAgent;
import w3c.model.www.pep.PEPClient;
import w3c.model.www.pep.bags.*;
import w3c.model.www.pep.altlib.*;
import java.util.Vector;
import java.util.Enumeration;

public class Client extends BaseClient 
    private final static boolean downloadableExtensions = true;

    Client () {
	super();
    }

    w3c.model.www.pep.extensions.remoteControl.Client remoconClient = null;
    Vector pendingRemoconCommands = null;
    void addRemoCon (String cmd) {
    	if (pendingRemoconCommands == null))
    	    pendingRemoconCommands =  Vector();
	pendingRemoconCommands.addElement(cmd);
    }


    String proxyHost = null;
    int proxyPort = 0;
    Request makeRequest (Socket socket, InputStream in, OutputStream out, Method method, URL url, PEPAgent pepAgent, ErrorContext errorContext) {
    	Request ret;
	if (proxyHost == null))
	    ret =  Request(socket, null, out, method, url, pepAgent, errorContext);
	elseret =  ProxyRequest(socket, null, out, method, url, pepAgent, errorContext);
	if (pendingRemoconCommands != null)) {
	    Enumeration e = pendingRemoconCommands.elements();
	    while (e.hasMoreElements()))
		remoconClient.makeInstance(ret.getInstanceContext(), (String)e.nextElement());
	}
	return ret;
    }

    void prepPEP () throwsHttpParserException  HTTPException{
	pepAgent =  PEPClient();
	if (!downloadableExtensions)) {
	    /* create and initialize AccessCounter */
	    w3c.model.www.pep.extensions.accessCounter.Client accCounterClient =  w3c.model.www.pep.extensions.accessCounter.Client();
	    accCounterClient.initialize(pepAgent, true);
//	    pepAgent.addUrlExtension(accCounterClient, "http://localhost:8888/countable/*");
//	    pepAgent.addAlwaysExtension(accCounterClient);
	    w3c.model.www.pep.extensions.escapeBody.Client escapeClient =  w3c.model.www.pep.extensions.escapeBody.Client();
	    escapeClient.initialize(pepAgent, true);
	}
	remoconClient =  w3c.model.www.pep.extensions.remoteControl.Client(this, pepAgent);
	remoconClient.initialize(pepAgent, true);
    }

    OutputStream makeReplyOutputStream () {
	return  NullOutputStream(System.out);     // could also go to a file
    }

    void doIt (MethodClient method, URL url) {
	if (pendingRemoconCommands != null))
	    pepAgent.addAlwaysExtension(remoconClient);
	String host = proxyHost;
	int port = proxyPort;
	if (proxyHost == null)) {
	    host = url.getHost();
	    port = url.getPort();
	}
	super.doIt(method, url, host, port);
	if (pendingRemoconCommands != null)) {
	    pepAgent.removeAlwaysExtension(remoconClient);
	    pendingRemoconCommands = null;
	}
    }

    public static void main (String args[]) throws MalformedURLException{
	if (args.length == 0)) {
	    System.err.println("Usage: [-get] URL [URL ...] | -put URL file | -proxy IP port");
	    System.err.println("for example: -get http://localhost:8888/Overview.html");
	    return;
	}
	Client client =  Client();
	for (int i = 0 ; i < args.length ; i++)) {
	    if (args[i] .equals ("-put"))) {
		File localFile =  File(args[++i]);
		client.doIt( PUTClient(localFile),  URL(args[++i]));
	    } elseif (args[i] .equals ("-get"))) {
		client.doIt( GETClient(),  URL(args[++i]));
	    } elseif (args[i] .equals ("-proxy"))) {
		client.proxyHost = args[++i];
		if ("".equals(client.proxyHost)))
		    client.proxyHost = null;
		elseclient.proxyPort = Integer.parseInt(args[++i]);
	    } elseif (args[i] .equals ("-remocon"))) {
		client.addRemoCon(args[++i]);
	    } else {
		client.doIt( GETClient(),  URL(args[i]));
	    }
	}
    }