Exemplo n.º 1
0
def track(args):
    if len(args) == 0:
        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(threading.Event(), config['timeout_check_interval'],
                  config['socket_timeout'], ipv6_enable=config['ipv6_enabled'])
    t = Tracker(config, r)
    r.bind(config['port'], 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()
Exemplo n.º 2
0
    def start(self):
        config = {k: v for k, v, _ in defaults}
        config['dfile'] = tempfile.mktemp()  # Use temporary file since it won't be reused.
        config['port'] = self.port

        rawserver = RawServer(
            doneflag=Event(),
            timeout_check_interval=config['timeout_check_interval'],
            timeout=config['socket_timeout'],
            ipv6_enable=config['ipv6_enabled'])
        rawserver.bind(
            port=config['port'],
            bind=config['bind'],
            reuse=True,
            ipv6_socket_style=config['ipv6_binds_v4'])

        self._tracker = _Tracker(config, rawserver)

        # Spawn in separate thread.
        spawn(rawserver.listen_forever, HTTPHandler(self._tracker.get, config['min_time_between_log_flushes']))
Exemplo n.º 3
0
    def start(self):
        config = {k: v for k, v, _ in defaults}
        config['dfile'] = tempfile.mktemp(
        )  # Use temporary file since it won't be reused.
        config['port'] = self.port

        rawserver = RawServer(
            doneflag=Event(),
            timeout_check_interval=config['timeout_check_interval'],
            timeout=config['socket_timeout'],
            ipv6_enable=config['ipv6_enabled'])
        rawserver.bind(port=config['port'],
                       bind=config['bind'],
                       reuse=True,
                       ipv6_socket_style=config['ipv6_binds_v4'])

        self._tracker = _Tracker(config, rawserver)

        # Spawn in separate thread.
        spawn(
            rawserver.listen_forever,
            HTTPHandler(self._tracker.get,
                        config['min_time_between_log_flushes']))
Exemplo n.º 4
0

def track(args):
    if len(args) == 0:
        print formatDefinitions(defaults, 80)
        return
    try:
        config, files = parseargs(args, defaults, 0, 0)
    except ValueError, e:
        print 'error: ' + str(e)
        print 'run with no arguments for parameter explanations'
        return
    r = RawServer(Event(), config['timeout_check_interval'],
                  config['socket_timeout'], ipv6_enable = config['ipv6_enabled'])
    t = Tracker(config, r)
    r.bind(config['port'], 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_dfile()
    print '# Shutting down: ' + isotime()

def size_format(s):
    if (s < 1024):
        r = str(s) + 'B'
    elif (s < 1048576):
        r = str(int(s/1024)) + 'KiB'
    elif (s < 1073741824L):
        r = str(int(s/1048576)) + 'MiB'
    elif (s < 1099511627776L):
        r = str(int((s/1073741824.0)*100.0)/100.0) + 'GiB'
    else:
        r = str(int((s/1099511627776.0)*100.0)/100.0) + 'TiB'
Exemplo n.º 5
0
    def start(self):
        rawserver = None

        try:
            config = dict([(v[0], v[1]) for v in defaults])
            config['ip'] = self.ip
            config['responsefile'] = self.torrent_file
            config['saveas'] = self.destination_file

            random.seed(self.id)

            rawserver = RawServer(
                doneflag=self.done_flag,
                timeout_check_interval=config['timeout_check_interval'],
                timeout=config['timeout'],
                ipv6_enable=config['ipv6_enabled'],
                failfunc=self.on_fail,
                errorfunc=self.on_exception)
            rawserver.bind(port=self.port,
                           bind=config['bind'],
                           reuse=True,
                           ipv6_socket_style=config['ipv6_binds_v4'])

            # Download torrent metadata.
            response = get_response(file=config['responsefile'],
                                    url=config['url'],
                                    errorfunc=self.on_error)

            # Bail if tracker is done.
            if not response:
                return

            dow = BT1Download(statusfunc=self.on_status,
                              finfunc=self.on_finish,
                              errorfunc=self.on_error,
                              excfunc=self.on_exception,
                              doneflag=self.done_flag,
                              config=config,
                              response=response,
                              infohash=hashlib.sha1(bencode(
                                  response['info'])).digest(),
                              id=self.id,
                              rawserver=rawserver,
                              port=self.port)

            if not dow.saveAs(lambda default, size, saveas, dir: saveas
                              if saveas else default):
                return

            if not dow.initFiles(old_style=True):
                return

            if not dow.startEngine():
                dow.shutdown()
                return

            dow.startRerequester()
            dow.autoStats()

            if not dow.am_I_finished():
                self.on_status(activity='connecting to peers')

            rawserver.listen_forever(dow.getPortHandler())

            self.on_status(activity='shutting down')

            dow.shutdown()
        finally:
            if rawserver:
                rawserver.shutdown()

            if not self.finished_at:
                self.on_fail()
Exemplo n.º 6
0
    def start(self):
        rawserver = None

        try:
            config = dict([(v[0], v[1]) for v in defaults])
            config['ip'] = self.ip
            config['responsefile'] = self.torrent_file
            config['saveas'] = self.destination_file

            random.seed(self.id)

            rawserver = RawServer(
                doneflag=self.done_flag,
                timeout_check_interval=config['timeout_check_interval'],
                timeout=config['timeout'],
                ipv6_enable=config['ipv6_enabled'],
                failfunc=self.on_fail,
                errorfunc=self.on_exception)
            rawserver.bind(
                port=self.port,
                bind=config['bind'],
                reuse=True,
                ipv6_socket_style=config['ipv6_binds_v4'])

            # Download torrent metadata.
            response = get_response(
                file=config['responsefile'],
                url=config['url'],
                errorfunc=self.on_error)

            # Bail if tracker is done.
            if not response:
                return

            dow = BT1Download(
                statusfunc=self.on_status,
                finfunc=self.on_finish,
                errorfunc=self.on_error,
                excfunc=self.on_exception,
                doneflag=self.done_flag,
                config=config,
                response=response,
                infohash=hashlib.sha1(bencode(response['info'])).digest(),
                id=self.id,
                rawserver=rawserver,
                port=self.port)

            if not dow.saveAs(lambda default, size, saveas, dir: saveas if saveas else default):
                return

            if not dow.initFiles(old_style=True):
                return

            if not dow.startEngine():
                dow.shutdown()
                return

            dow.startRerequester()
            dow.autoStats()

            if not dow.am_I_finished():
                self.on_status(activity='connecting to peers')

            rawserver.listen_forever(dow.getPortHandler())

            self.on_status(activity='shutting down')

            dow.shutdown()
        finally:
            if rawserver:
                rawserver.shutdown()

            if not self.finished_at:
                self.on_fail()