Changeset 43
- Timestamp:
- 02/11/04 21:52:10 (5 years ago)
- Files:
-
- trunk/spidentd.py (modified) (5 diffs, 3 props)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/spidentd.py
- Property svn:eol-style deleted
- Property svn:executable deleted
- Property svn:keywords deleted
r42 r43 13 13 import grp 14 14 import getopt 15 import re 15 16 16 17 class Driver: … … 74 75 75 76 class SocketDriverClient: 76 def __init_(self,driver,sock): 77 add_re=re.compile(r"add (\d+\.\d+\.\d+\.\d+):(\d+) (\d+\.\d+\.\d+\.\d+):(\d+) (.*)") 78 remove_re=re.compile(r"remove (\d+\.\d+\.\d+\.\d+):(\d+) (\d+\.\d+\.\d+\.\d+):(\d+)") 79 def __init__(self,driver,sock): 77 80 self.socket=sock 81 self.driver=driver 78 82 self.thread=threading.Thread(target=self.run_thread) 79 83 self.thread.setDaemon(1) 80 84 self.conn_users={} 81 self.thread.run() 85 self.buf="" 86 self.thread.start() 87 88 def run_thread(self): 89 try: 90 self._run_thread() 91 finally: 92 self.conn_users={} 93 try: 94 self.driver.clients.remove(self) 95 except ValueError: 96 pass 97 try: 98 self.sock.close() 99 except: 100 pass 101 102 def _run_thread(self): 103 global exit 104 while not exit: 105 l=self.read_line() 106 if not l: 107 break 108 print >>sys.stderr,"Got %r on programming socket" % (l,) 109 m=self.add_re.match(l) 110 if m: 111 localip,localport,remoteip,remoteport,user=m.groups() 112 self.conn_users[(int(localport),localip, 113 int(remoteport),remoteip)]=user 114 continue 115 m=self.remove_re.match(l) 116 if m: 117 localip,localport,remoteip,remoteport=m.groups() 118 try: 119 del self.conn_users[(int(localport),localip, 120 int(remoteport),remoteip)] 121 except KeyError: 122 pass 123 continue 124 print >>sys.stderr,"Bad protocol on programming socket" 125 126 def read_line(self): 127 while 1: 128 if "\n" in self.buf: 129 line,self.buf=self.buf.split("\n",1) 130 return line 131 if len(self.buf)>1024: 132 print >>sys.stderr,"Input line too long" 133 return None 134 r=self.socket.recv(1024) 135 if not r: 136 return None 137 self.buf+=r 138 82 139 83 140 class SocketDriver(Driver): 84 141 def __init__(self,path): 85 142 self.socket=socket.socket(socket.AF_UNIX) 143 try: 144 os.unlink(path) 145 except: 146 pass 86 147 self.socket.bind(path) 87 148 self.socket.listen(1) … … 90 151 def lookup(self,localport,localip,remoteport,remoteip): 91 152 for c in self.clients: 92 connuser=c.conn_users.get [(localport,localip,remoteport,remoteip)]153 connuser=c.conn_users.get((localport,localip,remoteport,remoteip)) 93 154 if connuser: 94 155 return connuser … … 124 185 sock.close() 125 186 return 126 if buf.find("\r\n") :187 if buf.find("\r\n")>=0: 127 188 break 128 189 query=buf.split("\r",1)[0] … … 245 306 246 307 sock=socket.socket() 247 sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) 308 try: 309 sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) 310 except: 311 pass 248 312 sock.bind((ip,port)) 249 313
