# vi: encoding=utf-8 ts=8 sts=4 sw=4 et import socket import os import select from common import fileexists import ftpio import cmds class Connection: def __init__(self, sock, authorized): sock.setblocking(False) self.sock=sock self.authorized=authorized self.fileno=sock.fileno self.name="" self.data="" def destroy(self): self.sock.close() rm(self) def handleinput(self): newdata = None try: newdata = self.sock.recv(8192) except: self.destroy() if not newdata: self.destroy() else: self.data = self.data + newdata.decode("utf-8") try: cmds.parse(self) except cmds.BailOut: self.destroy() def add(con): cons.append(con) def rm(con): cons.remove(con) def readables(): lst=cons[:] lst.append(privlistener) lst.append(publistener) inlst,outlst,errlst = select.select(lst, [], [], 0.1) return inlst def createlistener(path): if fileexists(path): os.remove(path) s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) s.setblocking(False) s.bind(path) if path==ftpio.pubsock: os.chmod(path, 0o606) else: os.chmod(path, 0o600) s.listen(3) return s cons=[] privlistener=createlistener(ftpio.privsock) publistener=createlistener(ftpio.pubsock)