Пример #1
0
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()
Пример #2
0
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()
Пример #3
0
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)
Пример #4
0
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)