Exemplo n.º 1
0
 def run(self):
     try:
         if DEBUG:
             print >> sys.stderr, 'Torrent Checking: RUN', threading.currentThread().getName()
         event = threading.Event()
         return_value = safe_dict()
         return_value['event'] = event
         return_value['torrent'] = None
         if self.infohash is None:
             policy = self.selectPolicy()
             if self.db_thread:
                 self.db_thread.add_task(lambda : TorrentDBHandler.getInstance().selectTorrentToCheck(policy=policy, return_value=return_value))
             else:
                 TorrentDBHandler.getInstance().selectTorrentToCheck(policy=policy, return_value=return_value)
         elif self.db_thread:
             self.db_thread.add_task(lambda : TorrentDBHandler.getInstance().selectTorrentToCheck(infohash=self.infohash, return_value=return_value))
         else:
             TorrentDBHandler.getInstance().selectTorrentToCheck(infohash=self.infohash, return_value=return_value)
         event.wait(60.0)
         torrent = return_value['torrent']
         if DEBUG:
             print >> sys.stderr, 'Torrent Checking: get value from DB:', torrent
         if not torrent:
             return
         if self.infohash is None and torrent['ignored_times'] > 0:
             if DEBUG:
                 print >> sys.stderr, 'Torrent_checking: torrent: %s' % torrent
             kw = {'ignored_times': torrent['ignored_times'] - 1}
             if self.db_thread:
                 self.db_thread.add_task(lambda : TorrentDBHandler.getInstance().updateTracker(torrent['infohash'], kw))
             else:
                 TorrentDBHandler.getInstance().updateTracker(torrent['infohash'], kw)
             return
         torrent = self.readTorrent(torrent)
         if 'info' not in torrent:
             if self.db_thread:
                 self.db_thread.add_task(lambda : TorrentDBHandler.getInstance().deleteTorrent(torrent['infohash']))
             else:
                 TorrentDBHandler.getInstance().deleteTorrent(torrent['infohash'])
             return
         if DEBUG:
             print >> sys.stderr, 'Tracker Checking'
         trackerChecking(torrent)
         self.mldhtchecker.lookup(torrent['infohash'])
         self.updateTorrentInfo(torrent)
         kw = {'last_check_time': int(time()),
          'seeder': torrent['seeder'],
          'leecher': torrent['leecher'],
          'status': torrent['status'],
          'ignored_times': torrent['ignored_times'],
          'retried_times': torrent['retried_times']}
         if DEBUG:
             print >> sys.stderr, 'Torrent Checking: selectTorrentToCheck:', kw
         if self.db_thread:
             self.db_thread.add_task(lambda : TorrentDBHandler.getInstance().updateTorrent(torrent['infohash'], **kw))
         else:
             TorrentDBHandler.getInstance().updateTorrent(torrent['infohash'], **kw)
     finally:
         if not self.db_thread:
             TorrentDBHandler.getInstance().close()
Exemplo n.º 2
0
 def __init__(self):
     if SecureOverlay.__single:
         raise RuntimeError, 'SecureOverlay is Singleton'
     SecureOverlay.__single = self
     self.olproto_ver_current = OLPROTO_VER_CURRENT
     self.usermsghandler = None
     self.userconnhandler = None
     self.dns = safe_dict()