#!/usr/local/bin/perl -Tw
#
#  $Id: smallhttp,v 1.1 2000/09/26 19:25:31 dgregor Exp $
#
# Copyright (c) 1998,2000 Daniel J. Gregor, Jr., All rights reserved.
# 
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
# 3. All advertising materials mentioning features or use of this software
#    must display the following acknowledgement:
# 	This product includes software developed by Daniel J. Gregor, Jr.
# 4. The name of Daniel J. Gregor, Jr. may not be used to endorse or promote
#    products derived from this software without specific prior written
#    permission.
# 
# THIS SOFTWARE IS PROVIDED BY DANIEL J. GREGOR, JR. ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED.  IN NO EVENT SHALL DANIEL J. GREGOR, JR. BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
#
# Usage: smallhttp.pl <file> <mimetype> <logfile>

die "Too few command-line arguments--read the source\n" unless @ARGV == 3;

$file = shift(@ARGV);
$mimetype = shift(@ARGV);
$logfile = shift(@ARGV);

open(FILE, "<$file") || die "Could not open input file: $!\n";
open(LOG, ">>$logfile") || die "Could not open log file: $!\n";

# unbuffer the i/o
select((select(STDERR),$|=1)[0]);
select((select(STDOUT),$|=1)[0]);

while (<>) {
        $request = $_;
        chomp($request);
        ($method,$url,$protocol) = split(/ /, $_);
        $url = $url;
        $protocol = $protocol;
        $method =~ tr/a-z/A-Z/;
        print LOG localtime(time()) . " request for $file: " . $request . "\n";
        if ($method eq "GET") {
                &Get;
        } else {
                &Get;
        }
        exit;
}

sub Get {
        print "HTTP/1.0 200 Okay\r\n";
        print "Content-type: $mimetype\r\n";
        print "\r\n";

        # If datachunk is undefined when read() is called below,
        # then an undefined data warning will occur and cause a
        # server error.  So, I just define it to be "".
        local($datachunk) = "";

        while (read(FILE, $datachunk, 8192) != 0) {
                print($datachunk);
        }

}

