#!/usr/bin/python
# World's dumbest HTTPD.
import thread, socket

class FilenameNotAllowed(Exception): pass
class MethodNotUnderstood(Exception): pass

def handle_req(conn):
    buf = ''
    while '\n' not in buf:
        buf += conn.recv(4096)

    command = 'GET /'
    if buf.startswith(command):
        filename = buf[len(command):].split()[0]
        if '/' in filename: raise FilenameNotAllowed(filename)
        conn.send(open(filename).read())

    else:
        raise MethodNotUnderstood(buf)

def respond(conn):
    try: handle_req(conn)
    finally: conn.close()

def main():
    sock = socket.socket()
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    sock.bind(('', 8000))
    sock.listen(5)
    while True: thread.start_new_thread(respond, (sock.accept()[0],))

if __name__ == '__main__': main()

