]> TLD Linux GIT Repositories - tld-ftp-admin.git/blob - modules/cons.py
- non-integer releases are ok in TLD
[tld-ftp-admin.git] / modules / cons.py
1 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
2
3 import socket
4 import os
5 import select
6 from common import fileexists
7 import ftpio
8 import cmds
9
10 class Connection:
11     def __init__(self, sock, authorized):
12         sock.setblocking(False)
13         self.sock=sock
14         self.authorized=authorized
15         self.fileno=sock.fileno
16         self.name=""
17         self.data=""
18
19     def destroy(self):
20         self.sock.close()
21         rm(self)
22
23     def handleinput(self):
24         newdata = None
25         try:
26             newdata = self.sock.recv(8192)
27         except:
28             self.destroy()
29
30         if not newdata:
31             self.destroy()
32         else:
33             self.data = self.data + newdata.decode("utf-8")
34
35         try:
36             cmds.parse(self)
37         except cmds.BailOut:
38             self.destroy()
39
40 def add(con):
41     cons.append(con)
42    
43 def rm(con):
44     cons.remove(con)
45
46 def readables():
47     lst=cons[:]
48     lst.append(privlistener)
49     lst.append(publistener)
50     inlst,outlst,errlst = select.select(lst, [], [], 0.1)
51     return inlst
52
53 def createlistener(path):
54     if fileexists(path):
55         os.remove(path)
56
57     s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
58     s.setblocking(False)
59     s.bind(path)
60     if path==ftpio.pubsock:
61         os.chmod(path, 0o606)
62     else:
63         os.chmod(path, 0o600)
64     s.listen(3)
65     return s
66
67 cons=[]
68
69 privlistener=createlistener(ftpio.privsock)
70 publistener=createlistener(ftpio.pubsock)
71
72
73