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()
 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()
 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()
 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()