Exemplo n.º 1
0
 def get_reader(self):
     if self.collector:
         if self.new_collector:
             self.new_collector = False
         return self.collector.get_reader()
     else:
         log.critical("Request for a reader was made before " \
                      "a connection was assigned a collector")
         raise RuntimeError("Unable to get data collector")
Exemplo n.º 2
0
 def loop(self):
     try:
         while not self.doneflag.isSet():
             self._pop_externally_added()
             period = 1e9
             if len(self.tasks) > 0:
                 # Poll until the next task is set to execute
                 period = max(0, self.tasks[0][0] - bttime())
             asyncore.poll(period)
             self.do_tasks()
     except KeyboardInterrupt:
         #TODO: cleanup?
         pass
     except:
         log.critical('\n'+traceback.format_exc())
Exemplo n.º 3
0
 def loop(self):
     try:
         while not self.doneflag.isSet():
             self._pop_externally_added()
             period = 1e9
             if len(self.tasks) > 0:
                 # Poll until the next task is set to execute
                 period = max(0, self.tasks[0][0] - bttime())
             asyncore.poll(period)
             self.do_tasks()
     except KeyboardInterrupt:
         #TODO: cleanup?
         pass
     except:
         log.critical('\n' + traceback.format_exc())
Exemplo n.º 4
0
 def got_exception(self, e):
     is_external = False
     if isinstance(e, BTShutdown):
         log.error(str(e))
         is_external = True
     elif isinstance(e, BTFailure):
         log.critical(str(e))
         self._activity = ("download failed: " + str(e), 0)
     elif isinstance(e, IOError):
         log.critical("IO Error " + str(e))
         self._activity = ("killed by IO error: " + str(e), 0)
     elif isinstance(e, OSError):
         log.critical("OS Error " + str(e))
         self._activity = ("killed by OS error: " + str(e), 0)
     else:
         data = StringIO()
         print_exc(file=data)
         log.critical(data.getvalue())
         self._activity = ("killed by internal exception: " + str(e), 0)
     try:
         self._close()
     except Exception, e:
         log.error("Additional error when closing down due to " "error: " + str(e))
Exemplo n.º 5
0
 def got_exception(self, e):
     is_external = False
     if isinstance(e, BTShutdown):
         log.error(str(e))
         is_external = True
     elif isinstance(e, BTFailure):
         log.critical(str(e))
         self._activity = ('download failed: ' + str(e), 0)
     elif isinstance(e, IOError):
         log.critical('IO Error ' + str(e))
         self._activity = ('killed by IO error: ' + str(e), 0)
     elif isinstance(e, OSError):
         log.critical('OS Error ' + str(e))
         self._activity = ('killed by OS error: ' + str(e), 0)
     else:
         data = StringIO()
         print_exc(file=data)
         log.critical(data.getvalue())
         self._activity = ('killed by internal exception: ' + str(e), 0)
     try:
         self._close()
     except Exception, e:
         log.error('Additional error when closing down due to '
                     'error: ' + str(e))
Exemplo n.º 6
0
     return
 try:
     # Here's where we receive/decrypt data from the tracker
     r = bdecode(data)
     check_peers(r)
 except BTFailure, e:
     if data != '':
         log.error('bad data from tracker - ' + str(e))
     self._fail()
     return
 if r.has_key('failure reason'):
     if self.neighbors.count() > 0:
         log.error('rejected by tracker - ' + r['failure reason'])
     else:
         log.critical("Aborting the torrent as it was " \
             "rejected by the tracker while not connected to any peers. " \
             "Message from the tracker:\n" + r['failure reason'])
     self._fail()
     return
 elif self.neighbors is None:
     # Torrent may have been closed before receiving a response
     # from the tracker.
     self._fail()
     return
 else:
     self.fail_wait = None
     if r.has_key('warning message'):
         log.error('warning from tracker - ' + r['warning message'])
     self.announce_interval = r.get('interval', self.announce_interval)
     self.config['rerequest_interval'] = self.announce_interval
                                         #r.get('min interval', self.config['rerequest_interval'])
Exemplo n.º 7
0
 def handle_expt(self):
     if self.bound:
         log.critical('\n' + traceback.format_exc())
         self.clear()
Exemplo n.º 8
0
 def handle_expt(self):
     if self.bound:
         log.critical('\n'+traceback.format_exc())
         self.clear()
Exemplo n.º 9
0
        serversocket.close()
        del self.ports[port]

    def find_port(self, listen_fail_ok=True):
        e = 'maxport less than minport - no ports to check'
        self.config['minport'] = max(1, self.config['minport'])
        for port in xrange(self.config['minport'], self.config['maxport'] + 1):
            try:
                self.open_port(port)
                break
            except socketerror, e:
                pass
        else:
            if not listen_fail_ok:
                raise BTFailure, "Couldn't open a listening port: " + str(e)
            log.critical("Could not open a listening port: " +
                           str(e) + ". Check your port range settings.")

    def open_port(self, port):
        if port in self.ports:
            self.port = port
            return
        serversocket = P2PServer(self.config['bind'], port, self.ssl_ctx)
        oldport = self.port
        self.port = port
        self.ports[port] = [serversocket, 0]
        self._check_close(oldport)

    def get_port(self, nbrmgr):
        if self.port:
            self.ports[self.port][0].set_neighbor_manager(nbrmgr)
            self.ports[self.port][1] += 1
Exemplo n.º 10
0
 def handle_expt(self):
     log.critical("Exception encountered!")
     self.close()
Exemplo n.º 11
0
        serversocket.close()
        del self.ports[port]

    def find_port(self, listen_fail_ok=True):
        e = 'maxport less than minport - no ports to check'
        self.config['minport'] = max(1, self.config['minport'])
        for port in xrange(self.config['minport'], self.config['maxport'] + 1):
            try:
                self.open_port(port)
                break
            except socketerror, e:
                pass
        else:
            if not listen_fail_ok:
                raise BTFailure, "Couldn't open a listening port: " + str(e)
            log.critical("Could not open a listening port: " + str(e) +
                         ". Check your port range settings.")

    def open_port(self, port):
        if port in self.ports:
            self.port = port
            return
        serversocket = P2PServer(self.config['bind'], port, self.ssl_ctx)
        oldport = self.port
        self.port = port
        self.ports[port] = [serversocket, 0]
        self._check_close(oldport)

    def get_port(self, nbrmgr):
        if self.port:
            self.ports[self.port][0].set_neighbor_manager(nbrmgr)
            self.ports[self.port][1] += 1
Exemplo n.º 12
0
 def handle_error(self):
     log.critical('\n'+traceback.format_exc())
     self.close()