#!tcl

#
# HTTP Daemon
#

if {$argc == 1} {
    set port [lindex $argv 0]
} else {
    set port 8080
}

set s [socket -p $port 1]

while {1} {
    set ns [$s accept]

    set data [$ns gets 512]

    set fname [lindex $data 1]
    set fname [concat [pwd]$fname]

    if {[file exists $fname]} {
        set len [file size $fname]
    } else {
        set r [string first "cmd?COMMAND=" $fname] 
        if {$r != -1} {
            set cmd [split $fname =]
            set cmd [lindex $cmd 1]
            set cmd [split $cmd +]
            set command [lindex $cmd 0]
            set arg1 [lindex $cmd 1]
            set arg2 [lindex $cmd 2] 
            set arg3 [lindex $cmd 3] 
            set arg4 [lindex $cmd 4] 
            set arg5 [lindex $cmd 5] 
            $ns puts "HTTP/1.0 200 OK\n"
            $ns puts "Content-type: text/plain\n"
            $ns puts "Expires: Thu, 01 Dec 1994 16:00:00 GMT\n"
            $ns puts "\n"
            if {$cmd == "exit"} {
                $ns puts "Goodbye.\nHTTPD terminated.\n"
                rename $ns {}
                break
            }
            if {$cmd == "termin"} {
                $ns puts "Goodbye.\nHTTPD terminated.\n"
                rename $ns {}
                break
            }
            set result [exec $command $arg1 $arg2 $arg3 $arg4 $arg5]
            $ns puts $result
            $ns puts "\n"
            rename $ns {} 
            continue
        } else {
            $ns puts "HTTP/1.0 200 OK\n"
            $ns puts "Content-type: text/plain\n"
            $ns puts "Expires: Thu, 01 Dec 1994 16:00:00 GMT\n"
            $ns puts "\n"
            set result "Page not available"
            $ns puts $result
            $ns puts "\n"
            rename $ns {} 
            continue
        }
    }
    $ns puts "HTTP/1.0 200 OK\n"
#    $ns puts "Content-type: text/plain\n"
    $ns puts "Expires: Thu, 01 Dec 1994 16:00:00 GMT\n"
    $ns puts "\n"
    set len [$ns putf $fname]
    rename $ns {}
}

rename $s {}
