from twisted.internet.protocol import Protocol, Factory, ClientFactory from core.main import * from utils.logging.log import * from core.parser import parseCommand class Server(Protocol): def __init__(self, addr): self.addr = addr self.authed = False if config["UsePassword"] == False: self.authed = True def send(self, data): data += "\r\n" data = data.encode("utf-8", "replace") self.transport.write(data) def dataReceived(self, data): data = data.decode("utf-8", "replace") #log("Data received from %s:%s -- %s" % (self.addr.host, self.addr.port, repr(data))) if "\n" in data: splitData = [x for x in data.split("\n") if x] if "\n" in data: for i in splitData: parseCommand(self.addr, self.authed, i) return parseCommand(self.addr, self.authed, data) def connectionMade(self): log("Connection from %s:%s" % (self.addr.host, self.addr.port)) self.send("Hello.") def connectionLost(self, reason): self.authed = False log("Connection lost from %s:%s -- %s" % (self.addr.host, self.addr.port, reason.getErrorMessage())) if self.addr in connections.keys(): del connections[self.addr] else: warn("Tried to remove a non-existant connection.") if self.addr in MonitorPool: MonitorPool.remove(self.addr) class ServerFactory(Factory): def buildProtocol(self, addr): entry = Server(addr) connections[addr] = entry return entry def send(self, addr, data): if addr in connections.keys(): connection = connections[addr] connection.send(data) else: return