#!/usr/bin/env python

# Simple server for the "count characters" protocol. No crypto, anyone
# can sniff the traffic

import SocketServer
import socket
import logging

PORT=4923

class RequestHandler(SocketServer.StreamRequestHandler):

    def handle(self):
        logging.info("Client connection")
        text = "DUMMY"
        data = ""
        size = 0
        while text != "":
            text = self.rfile.read(1)
            if text == "\n" or text == "":
                break
            else:
                # TODO: handle UnicodeDecodeError
                data += text.decode("UTF-8")
        size = len(data)
        self.wfile.write((u"You sent %i characters" % size).encode("UTF-8"))

class Server(SocketServer.ThreadingMixIn, SocketServer.TCPServer): 

    def __init__(self, address, handler):
        SocketServer.TCPServer.__init__(self, address, handler)
        logging.info("Starting server")

logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(levelname)s %(message)s',
                    datefmt='%Y-%m-%d %H:%M:%S')
Server.address_family = socket.AF_INET6
Server.allow_reuse_address = True
myserver = Server(("", PORT), RequestHandler)
try:
    myserver.serve_forever()
except KeyboardInterrupt:
    logging.info("Server stopped")



