예제 #1
0
    def __init__(self, i2iport, connhandler, timeout=300.0):
        Thread.__init__(self)
        self.setDaemon(True)
        self.setName('Instance2Instance' + self.getName())
        self.i2iport = i2iport
        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)
        # Only accept local connections
        self.rawserver.bind(self.i2iport, bind=['127.0.0.1'], reuse=True)
예제 #2
0
    def __init__(self, testcase, port, secover):
        Thread.__init__(self)
        self.setDaemon(True)

        self.testcase = testcase

        self.doneflag = Event()
        config = {}
        config['timeout_check_interval'] = 100000
        config['timeout'] = 100000
        config['ipv6_enabled'] = 0
        config['minport'] = port
        config['maxport'] = port + 5
        config['random_port'] = 0
        config['bind'] = ''
        config['ipv6_binds_v4'] = 0
        config['max_message_length'] = 2**23
        config['state_dir'] = config['install_dir'] = tempfile.mkdtemp()
        config['peer_icon_path'] = 'icons'

        self.rawserver = RawServer(self.doneflag,
                                   config['timeout_check_interval'],
                                   config['timeout'],
                                   ipv6_enable=config['ipv6_enabled'],
                                   failfunc=self.report_failure,
                                   errorfunc=self.report_error)
        while 1:
            try:
                self.listen_port = self.rawserver.find_and_bind(
                    0,
                    config['minport'],
                    config['maxport'],
                    config['bind'],
                    reuse=True,
                    ipv6_socket_style=config['ipv6_binds_v4'],
                    randomizer=config['random_port'])
                print >> sys.stderr, "test: Got listen port", self.listen_port
                break
            except socketerror, e:
                self.report_failure(str(e))
                msg = "Couldn't not bind to listen port - " + str(e)
                self.report_failure(msg)
                return
예제 #3
0
def main():
    def on_fatal_error(error):
        print >> sys.stderr, error
        session_done_flag.set()

    def on_non_fatal_error(error):
        print >> sys.stderr, error
        session_done_flag.set()

    def start():
        # start Dispersy
        dispersy = TrackerDispersy.get_instance(callback,
                                                unicode(opt.statedir),
                                                opt.port)
        dispersy.endpoint = RawserverEndpoint(rawserver, dispersy, opt.port,
                                              opt.ip)
        dispersy.define_auto_load(TrackerCommunity)

    command_line_parser = optparse.OptionParser()
    command_line_parser.add_option("--statedir",
                                   action="store",
                                   type="string",
                                   help="Use an alternate statedir",
                                   default=".")
    command_line_parser.add_option("--ip",
                                   action="store",
                                   type="string",
                                   default="0.0.0.0",
                                   help="Dispersy uses this ip")
    command_line_parser.add_option("--port",
                                   action="store",
                                   type="int",
                                   help="Dispersy uses this UDL port",
                                   default=6421)
    command_line_parser.add_option("--timeout-check-interval",
                                   action="store",
                                   type="float",
                                   default=60.0)
    command_line_parser.add_option("--timeout",
                                   action="store",
                                   type="float",
                                   default=300.0)

    # parse command-line arguments
    opt, _ = command_line_parser.parse_args()
    print "Press Ctrl-C to stop Dispersy"

    # start threads
    session_done_flag = threading.Event()
    rawserver = RawServer(session_done_flag,
                          opt.timeout_check_interval,
                          opt.timeout,
                          False,
                          failfunc=on_fatal_error,
                          errorfunc=on_non_fatal_error)
    callback = Callback()
    callback.start(name="Dispersy")
    callback.register(start)

    def rawserver_adrenaline():
        """
        The rawserver tends to wait for a long time between handling tasks.
        """
        rawserver.add_task(rawserver_adrenaline, 0.1)

    rawserver.add_task(rawserver_adrenaline, 0.1)

    def watchdog():
        while True:
            try:
                yield 333.3
            except GeneratorExit:
                rawserver.shutdown()
                session_done_flag.set()
                break

    callback.register(watchdog)
    rawserver.listen_forever(None)
    callback.stop()