#!/usr/bin/env python3
# httpserver.py
#     Using SocketServer module

from socketserver import TCPServer, StreamRequestHandler
from socket import gethostname

DEBUG = False    # debugging flag
PORT = 2080      # default port

RESPONSE = \
"""HTTP/1.1 200 OK
Connection: Close
Content_type: text/html

<html>
<head><title>HTTPEcho Response</title>
</head>
<body>
<pre>
{}
</pre>
</body>
</html>"""

class EchoHandler(StreamRequestHandler):

    def handle(self):
        print("connection from", self.client_address)

        # Read lines until end of headers found
        data = ""
        while True:
            line = self.rfile.readline().decode("utf-8")
            if line.strip() == "": break       #empty line at end of header
            if DEBUG: print(line)
            data += line

        print("Got request, sending response")
        self.wfile.write(RESPONSE.format(data).encode("utf-8"))
        print("Response sent")

def start_server(port):
    server_address = (gethostname(), port)
    server = TCPServer(server_address, EchoHandler)
    print("Echo server started on port", port)
    server.serve_forever()

if __name__ == "__main__":
    import sys
    if len(sys.argv) == 2:
        start_server(int(sys.argv[1]))
    else:
        start_server(PORT)

