def track(args): if not args: print formatDefinitions(defaults, 80) return try: config, files = parseargs(args, defaults, 0, 0) except ValueError as e: print 'error: ' + str(e) print 'run with no arguments for parameter explanations' return r = RawServer(Event(), config['tracker_timeout_check_interval'], config['tracker_socket_timeout'], ipv6_enable=config['ipv6_enabled']) t = Tracker(config, r) r.bind(config['minport'], config['bind'], reuse=True, ipv6_socket_style=config['ipv6_binds_v4']) r.listen_forever(HTTPHandler(t.get, config['min_time_between_log_flushes'])) t.save_state() print '# Shutting down: ' + isotime()
class Instance2InstanceServer(Thread): def __init__(self, i2iport, connhandler, timeout=300.0, port_file=None): Thread.__init__(self) self.setDaemon(True) self.setName('Instance2Instance' + self.getName()) self.i2iport = i2iport self.port_file = port_file self.connhandler = connhandler self.i2idoneflag = Event() self.rawserver = RawServer(self.i2idoneflag, timeout / 5.0, timeout, ipv6_enable=False, failfunc=self.rawserver_fatalerrorfunc, errorfunc=self.rawserver_nonfatalerrorfunc) self.rawserver.add_task(self.rawserver_keepalive, 1) if globalConfig.get_value('allow-non-local-client-connection'): interfaces = self.rawserver.bind(self.i2iport, reuse=True) else: interfaces = self.rawserver.bind(self.i2iport, bind=['127.0.0.1'], reuse=True) if DEBUG: log('i2is::init: bound on interfaces', interfaces) if i2iport == 0 and len(interfaces): host, port = interfaces[0] self.i2iport = port if port_file is not None: f = None try: f = open(port_file, 'w') f.write(str(port)) except: if DEBUG: log('i2is::init: cannot save port to file', port_file) raise Exception, 'Cannot save port' finally: if f: f.close() def rawserver_keepalive(self): self.rawserver.add_task(self.rawserver_keepalive, 1) def shutdown(self): self.connhandler.shutdown() self.i2idoneflag.set() if self.port_file is not None and os.path.isfile(self.port_file): try: os.remove(self.port_file) except: if DEBUG: print_exc() def rawserver_fatalerrorfunc(self, e): if DEBUG: print >> sys.stderr, 'i2is: RawServer fatal error func called', e print_exc() def rawserver_nonfatalerrorfunc(self, e): if DEBUG: print >> sys.stderr, 'i2is: RawServer non fatal error func called', e print_exc() def run(self): try: if DEBUG: log('i2is::run: ready to receive remote commands on', self.i2iport) self.rawserver.listen_forever(self) except: print_exc() finally: self.rawserver.shutdown() def external_connection_made(self, s): try: self.connhandler.external_connection_made(s) except: print_exc() s.close() def connection_flushed(self, s): self.connhandler.connection_flushed(s) def connection_lost(self, s): if DEBUG: log('Instance2InstanceServer: connection_lost ------------------------------------------------' ) self.connhandler.connection_lost(s) def data_came_in(self, s, data): try: self.connhandler.data_came_in(s, data) except: print_exc() s.close() def add_task(self, func, t): self.rawserver.add_task(func, t)
class Instance2InstanceServer(Thread): def __init__(self, i2iport, connhandler, timeout = 300.0, port_file = None): Thread.__init__(self) self.setDaemon(True) self.setName('Instance2Instance' + self.getName()) self.i2iport = i2iport self.port_file = port_file self.connhandler = connhandler self.i2idoneflag = Event() self.rawserver = RawServer(self.i2idoneflag, timeout / 5.0, timeout, ipv6_enable=False, failfunc=self.rawserver_fatalerrorfunc, errorfunc=self.rawserver_nonfatalerrorfunc) self.rawserver.add_task(self.rawserver_keepalive, 1) if globalConfig.get_value('allow-non-local-client-connection'): interfaces = self.rawserver.bind(self.i2iport, reuse=True) else: interfaces = self.rawserver.bind(self.i2iport, bind=['127.0.0.1'], reuse=True) if DEBUG: log('i2is::init: bound on interfaces', interfaces) if i2iport == 0 and len(interfaces): host, port = interfaces[0] self.i2iport = port if port_file is not None: f = None try: f = open(port_file, 'w') f.write(str(port)) except: if DEBUG: log('i2is::init: cannot save port to file', port_file) raise Exception, 'Cannot save port' finally: if f: f.close() def rawserver_keepalive(self): self.rawserver.add_task(self.rawserver_keepalive, 1) def shutdown(self): self.connhandler.shutdown() self.i2idoneflag.set() if self.port_file is not None and os.path.isfile(self.port_file): try: os.remove(self.port_file) except: if DEBUG: print_exc() def rawserver_fatalerrorfunc(self, e): if DEBUG: print >> sys.stderr, 'i2is: RawServer fatal error func called', e print_exc() def rawserver_nonfatalerrorfunc(self, e): if DEBUG: print >> sys.stderr, 'i2is: RawServer non fatal error func called', e print_exc() def run(self): try: if DEBUG: log('i2is::run: ready to receive remote commands on', self.i2iport) self.rawserver.listen_forever(self) except: print_exc() finally: self.rawserver.shutdown() def external_connection_made(self, s): try: self.connhandler.external_connection_made(s) except: print_exc() s.close() def connection_flushed(self, s): self.connhandler.connection_flushed(s) def connection_lost(self, s): if DEBUG: log('Instance2InstanceServer: connection_lost ------------------------------------------------') self.connhandler.connection_lost(s) def data_came_in(self, s, data): try: self.connhandler.data_came_in(s, data) except: print_exc() s.close() def add_task(self, func, t): self.rawserver.add_task(func, t)