def setUpPostSession(self): """ override TestAsServer """ TestAsServer.setUpPostSession(self) self.mypermid = str(self.my_keypair.pub().get_der()) self.hispermid = str(self.his_keypair.pub().get_der()) # Create URL compat torrents and save in Torrent database. self.tdef1 = TorrentDef.load_from_url( P2PURL_SCHEME + '://127.2.3.42:7764/announce?SjaakCam.mpegts&k=MHowDQYJKoZIhvcNAQEBBQADaQAwZgJhAN0Khlp5ZhWC7VfLynCkKts71b8h8tZXH87PkDtJUTJaX_SS1Cddxkv63PRmKOvtAHhkTLSsWOZbSeHkOlPIq_FGg2aDLDJ05g3lQ-8mSmo05ff4SLqNUTShWO2CR2TPhQIBAw&l=HCAAAA&s=15&a=RSA&b=AAIAAA' ) self.torrentfn1 = os.path.join( self.session.get_torrent_collecting_dir(), "live.torrent") self.tdef1.save(self.torrentfn1) self.tdef2 = TorrentDef.load_from_url( P2PURL_SCHEME + '://127.1.0.10:6969/announce?trailer.mkv&r=TTgcifG0Ot7STCY2JL8SUOxROFo&l=AKK35A&s=15&b=AAFnGg' ) self.torrentfn2 = os.path.join( self.session.get_torrent_collecting_dir(), "vod.torrent") self.tdef2.save(self.torrentfn2) self.torrent_db = self.session.open_dbhandler(NTFY_TORRENTS) extra_info = {'status': 'good', 'filename': self.torrentfn1} self.torrent_db.addExternalTorrent(self.tdef1, source='', extra_info=extra_info) extra_info = {'status': 'good', 'filename': self.torrentfn2} self.torrent_db.addExternalTorrent(self.tdef2, source='', extra_info=extra_info)
def test_load_from_url(self): # Setup file server to serve torrent file self.session_base_dir = mkdtemp(suffix="_tribler_test_load_from_url") files_path = os.path.join(self.session_base_dir, 'http_torrent_files') os.mkdir(files_path) shutil.copyfile(TORRENT_UBUNTU_FILE, os.path.join(files_path, 'ubuntu.torrent')) file_server_port = get_random_port() self.setUpFileServer(file_server_port, files_path) def _on_load(torrent_def): torrent_def.metainfo = create_valid_metainfo( torrent_def.get_metainfo()) self.assertTrue(valid_torrent_file(torrent_def.get_metainfo())) self.assertEqual( torrent_def.get_metainfo(), TorrentDef.load(TORRENT_UBUNTU_FILE).get_metainfo()) self.assertEqual(torrent_def.infohash, TorrentDef.load(TORRENT_UBUNTU_FILE).infohash) torrent_url = 'http://localhost:%d/ubuntu.torrent' % file_server_port deferred = TorrentDef.load_from_url(torrent_url) deferred.addCallback(_on_load) return deferred
def startDownloadFromUrl(self, url, destdir=None, cmdline=False, selectedFiles=None, vodmode=False, hops=0): try: tdef = TorrentDef.load_from_url(url) if tdef: kwargs = { 'tdef': tdef, 'cmdline': cmdline, 'destdir': destdir, 'selectedFiles': selectedFiles, 'vodmode': vodmode, 'hops': hops } if wx.Thread_IsMain(): self.startDownload(**kwargs) else: wx.CallAfter(self.startDownload, *kwargs) return True except: print_exc() self.guiUtility.Notify("Download from url failed", icon=wx.ART_WARNING) return False
def start_download_from_url(self, url, dconfig=None): def _on_loaded(tdef): return self.start_download(torrentfilename=None, infohash=None, tdef=tdef, dconfig=dconfig) deferred = TorrentDef.load_from_url(url) deferred.addCallback(_on_loaded) return deferred
def start_download_from_url(self, url, dconfig=None): def _on_loaded(tdef): return self.start_download(torrentfilename=None, infohash=None, tdef=tdef, dconfig=dconfig) deferred = TorrentDef.load_from_url(url) deferred.addCallback(_on_loaded) return deferred
def setup(self): """ This sets up a Tribler session, loads the managers and the XML-RPC server. :return: Nothing. """ _logger.error("Loading XMLRPCServer") print "----------------------Loading XMLRPCServer" self.xmlrpc = XMLRPCServer(iface="0.0.0.0", port=8000) _logger.error("Loading TriblerSessionService") print "----------------------Loading TriblerSessionService" self.tribler = TriblerSession(self.xmlrpc) self.tribler.start_session() # Wait for dispersy to initialize print "----------------------Waiting for Dispersy to initialize" while not self.tribler.is_running(): time.sleep(0.1) print "----------------------Dispersy is initialized!" # Disable ChannelManager #_logger.error("Loading ChannelManager") #self.cm = ChannelManager.getInstance(self.tribler.get_session(), self.xmlrpc) _logger.error("Loading TorrentManager") print "----------------------Loading TorrentManager" self.tm = TorrentManager.getInstance(self.tribler.get_session(), self.xmlrpc) _logger.error("Loading DownloadManager") print "----------------------Loading DownloadManager" self.dm = DownloadManager.getInstance(self.tribler.get_session(), self.xmlrpc) _logger.error("Loading ConfigurationManager") print "----------------------Loading ConfigurationManager" # Load this last because it sets settings in other managers self.sm = SettingsManager.getInstance(self.tribler.get_session(), self.xmlrpc) _logger.error("Now running XMLRPC on http://%s:%s/tribler" % (self.xmlrpc._iface, self.xmlrpc._port)) print "----------------------Now running XMLRPC on http://%s:%s/tribler" % ( self.xmlrpc._iface, self.xmlrpc._port) self.xmlrpc.start_server() # TODO: test streaming: tdef = TorrentDef.load_from_url(URL) if tdef is None: raise TypeError('Torrent could not be loaded from ' + URL + '. Check if you\'ve got an internet connection.') self.info_hash = hexlify(tdef.get_infohash()) #self.tribler.get_session().set_install_dir(FILES_DIR + u'/lib/python2.7/site-packages') self.dm.add_torrent(self.info_hash, tdef.get_name()) Clock.schedule_interval(lambda dt: self.poller(), 3.0)
def setUpPostSession(self): """ override TestAsServer """ TestAsServer.setUpPostSession(self) self.mypermid = str(self.my_keypair.pub().get_der()) self.hispermid = str(self.his_keypair.pub().get_der()) # Create URL compat torrents and save in Torrent database. self.tdef1 = TorrentDef.load_from_url(P2PURL_SCHEME+'://127.2.3.42:7764/announce?SjaakCam.mpegts&k=MHowDQYJKoZIhvcNAQEBBQADaQAwZgJhAN0Khlp5ZhWC7VfLynCkKts71b8h8tZXH87PkDtJUTJaX_SS1Cddxkv63PRmKOvtAHhkTLSsWOZbSeHkOlPIq_FGg2aDLDJ05g3lQ-8mSmo05ff4SLqNUTShWO2CR2TPhQIBAw&l=HCAAAA&s=15&a=RSA&b=AAIAAA') self.torrentfn1 = os.path.join(self.session.get_torrent_collecting_dir(),"live.torrent") self.tdef1.save(self.torrentfn1) self.tdef2 = TorrentDef.load_from_url(P2PURL_SCHEME+'://127.1.0.10:6969/announce?trailer.mkv&r=TTgcifG0Ot7STCY2JL8SUOxROFo&l=AKK35A&s=15&b=AAFnGg') self.torrentfn2 = os.path.join(self.session.get_torrent_collecting_dir(),"vod.torrent") self.tdef2.save(self.torrentfn2) self.torrent_db = self.session.open_dbhandler(NTFY_TORRENTS) extra_info = {'status':'good', 'filename':self.torrentfn1} self.torrent_db.addExternalTorrent(self.tdef1, source='',extra_info=extra_info) extra_info = {'status':'good', 'filename':self.torrentfn2} self.torrent_db.addExternalTorrent(self.tdef2, source='',extra_info=extra_info)
def setup(self): """ This sets up a Tribler session, loads the managers and the XML-RPC server. :return: Nothing. """ _logger.error("Loading XMLRPCServer") print "----------------------Loading XMLRPCServer" self.xmlrpc = XMLRPCServer(iface="0.0.0.0", port=8000) _logger.error("Loading TriblerSessionService") print "----------------------Loading TriblerSessionService" self.tribler = TriblerSession(self.xmlrpc) self.tribler.start_session() # Wait for dispersy to initialize print "----------------------Waiting for Dispersy to initialize" while not self.tribler.is_running(): time.sleep(0.1) print "----------------------Dispersy is initialized!" # Disable ChannelManager #_logger.error("Loading ChannelManager") #self.cm = ChannelManager.getInstance(self.tribler.get_session(), self.xmlrpc) _logger.error("Loading TorrentManager") print "----------------------Loading TorrentManager" self.tm = TorrentManager.getInstance(self.tribler.get_session(), self.xmlrpc) _logger.error("Loading DownloadManager") print "----------------------Loading DownloadManager" self.dm = DownloadManager.getInstance(self.tribler.get_session(), self.xmlrpc) _logger.error("Loading ConfigurationManager") print "----------------------Loading ConfigurationManager" # Load this last because it sets settings in other managers self.sm = SettingsManager.getInstance(self.tribler.get_session(), self.xmlrpc) _logger.error("Now running XMLRPC on http://%s:%s/tribler" % (self.xmlrpc._iface, self.xmlrpc._port)) print "----------------------Now running XMLRPC on http://%s:%s/tribler" % (self.xmlrpc._iface, self.xmlrpc._port) self.xmlrpc.start_server() # TODO: test streaming: tdef = TorrentDef.load_from_url(URL) if tdef is None: raise TypeError('Torrent could not be loaded from ' + URL + '. Check if you\'ve got an internet connection.') self.info_hash = hexlify(tdef.get_infohash()) #self.tribler.get_session().set_install_dir(FILES_DIR + u'/lib/python2.7/site-packages') self.dm.add_torrent(self.info_hash, tdef.get_name()) Clock.schedule_interval(lambda dt: self.poller(), 3.0)
def isValidRemoteVal(d,selversion): if not isinstance(d,dict): if DEBUG: print >>sys.stderr,"rqmh: reply: a: value not dict" return False if selversion >= OLPROTO_VER_TWELFTH: if not ('content_name' in d and 'length' in d and 'leecher' in d and 'seeder' in d and 'category' in d and 'torrent_size' in d and 'channel_permid' in d and 'channel_name' in d): if DEBUG: print >>sys.stderr,"rqmh: reply: torrentrec12: key missing, got",d.keys() return False if 'metatype' in d and 'metadata' in d: try: metatype = d['metatype'] metadata = d['metadata'] if metatype == URL_MIME_TYPE: tdef = TorrentDef.load_from_url(metadata) else: metainfo = bdecode(metadata) tdef = TorrentDef.load_from_dict(metainfo) except: if DEBUG: print >>sys.stderr,"rqmh: reply: torrentrec12: metadata invalid" print_exc() return False elif selversion >= OLPROTO_VER_ELEVENTH: if not ('content_name' in d and 'length' in d and 'leecher' in d and 'seeder' in d and 'category' in d and 'torrent_size' in d and 'channel_permid' in d and 'channel_name' in d): if DEBUG: print >>sys.stderr,"rqmh: reply: torrentrec11: key missing, got",d.keys() return False elif selversion >= OLPROTO_VER_NINETH: if not ('content_name' in d and 'length' in d and 'leecher' in d and 'seeder' in d and 'category' in d and 'torrent_size' in d): if DEBUG: print >>sys.stderr,"rqmh: reply: torrentrec9: key missing, got",d.keys() return False else: if not ('content_name' in d and 'length' in d and 'leecher' in d and 'seeder' in d and 'category' in d): if DEBUG: print >>sys.stderr,"rqmh: reply: torrentrec6: key missing, got",d.keys() return False # if not (isinstance(d['content_name'],str) and isinstance(d['length'],int) and isinstance(d['leecher'],int) and isinstance(d['seeder'],int)): # return False # if len(d) > 4: # no other keys # return False return True
def test_load_from_url_404(self): # Setup file server to serve torrent file self.session_base_dir = mkdtemp(suffix="_tribler_test_load_from_url") files_path = os.path.join(self.session_base_dir, 'http_torrent_files') os.mkdir(files_path) # Do not copy the torrent file to produce 404 file_server_port = get_random_port() self.setUpFileServer(file_server_port, files_path) def _on_error(failure): failure.trap(HttpError) self.assertEqual(failure.value.response.code, 404) torrent_url = 'http://localhost:%d/ubuntu.torrent' % file_server_port deferred = TorrentDef.load_from_url(torrent_url) deferred.addErrback(_on_error) return deferred
def _GetDestPath(self, torrentfilename=None, torrenturl=None): tdef = None if torrentfilename: tdef = TorrentDef.load(torrentfilename) if torrenturl: tdef = TorrentDef.load_from_url(torrenturl) dlg = SaveAs( self, tdef, self.defaultDLConfig.get_dest_dir(), None, os.path.join(self.frame.utility.session.get_state_dir(), 'recent_download_history')) id = dlg.ShowModal() if id == wx.ID_OK: destdir = dlg.GetPath() else: destdir = None dlg.Destroy() return destdir
def test_load_from_url_404(self): # Setup file server to serve torrent file self.session_base_dir = mkdtemp(suffix="_tribler_test_load_from_url") files_path = os.path.join(self.session_base_dir, 'http_torrent_files') os.mkdir(files_path) # Do not copy the torrent file to produce 404 file_server_port = get_random_port() self.setUpFileServer(file_server_port, files_path) def _on_error(failure): failure.trap(HttpError) self.assertEqual(failure.value.response.code, 404) torrent_url = 'http://localhost:%d/ubuntu.torrent' % file_server_port deferred = TorrentDef.load_from_url(torrent_url) deferred.addErrback(_on_error) return deferred
def _refresh(self): channel_url = None try: self.key_url_lock.acquire() channel_url = deepcopy(self.key_url) finally: self.key_url_lock.release() if channel_url: for key, urls in channel_url.iteritems(): if key in self.key_callbacks: for url in urls: if DEBUG: print >> sys.stderr, "RssParser: getting rss ", url, len(urls) historyfile = self.gethistfilename(url, key) urls_already_seen = URLHistory(historyfile) urls_already_seen.read() newItems = self.readUrl(url, urls_already_seen) for title, new_urls, description, thumbnail in newItems: for new_url in new_urls: urls_already_seen.add(new_url) urls_already_seen.write() try: if DEBUG: print >> sys.stderr, "RssParser: trying ", new_url torrent = TorrentDef.load_from_url(new_url) torrent.save(self.gettorrentfilename(torrent)) for callback in self.key_callbacks[key]: try: callback(key, torrent, extraInfo = {'title':title, 'description': description, 'thumbnail': thumbnail}) except: print_exc() break except: pass time.sleep(RSS_CHECK_FREQUENCY)
def startDownloadFromUrl(self, url, destdir=None, cmdline=False, selectedFiles=None, vodmode=False, hops=0): try: tdef = TorrentDef.load_from_url(url) if tdef: kwargs = {'tdef': tdef, 'cmdline': cmdline, 'destdir': destdir, 'selectedFiles': selectedFiles, 'vodmode': vodmode, 'hops': hops} if wx.Thread_IsMain(): self.startDownload(**kwargs) else: wx.CallAfter(self.startDownload, *kwargs) return True except: print_exc() self.guiUtility.Notify("Download from url failed", icon=wx.ART_WARNING) return False
def test_load_from_url(self): # Setup file server to serve torrent file self.session_base_dir = mkdtemp(suffix="_tribler_test_load_from_url") files_path = os.path.join(self.session_base_dir, 'http_torrent_files') os.mkdir(files_path) shutil.copyfile(TORRENT_UBUNTU_FILE, os.path.join(files_path, 'ubuntu.torrent')) file_server_port = get_random_port() self.setUpFileServer(file_server_port, files_path) def _on_load(torrent_def): torrent_def.metainfo = create_valid_metainfo(torrent_def.get_metainfo()) self.assertTrue(valid_torrent_file(torrent_def.get_metainfo())) self.assertEqual(torrent_def.get_metainfo(), TorrentDef.load(TORRENT_UBUNTU_FILE).get_metainfo()) self.assertEqual(torrent_def.infohash, TorrentDef.load(TORRENT_UBUNTU_FILE).infohash) torrent_url = 'http://localhost:%d/ubuntu.torrent' % file_server_port deferred = TorrentDef.load_from_url(torrent_url) deferred.addCallback(_on_load) return deferred
def _GetDestPath(self, torrentfilename=None, torrenturl=None): tdef = None if torrentfilename: tdef = TorrentDef.load(torrentfilename) if torrenturl: tdef = TorrentDef.load_from_url(torrenturl) dlg = SaveAs( self, tdef, self.defaultDLConfig.get_dest_dir(), None, os.path.join(self.frame.utility.session.get_state_dir(), "recent_download_history"), ) id = dlg.ShowModal() if id == wx.ID_OK: destdir = dlg.GetPath() else: destdir = None dlg.Destroy() return destdir
def got_metadata(self, permid, message, selversion): """ receive torrent file from others """ # Arno, 2007-06-20: Disabled the following code. What's this? Somebody sends # us something and we refuse? Also doesn't take into account download help #and remote-query extension. #if self.upload_rate <= 0: # if no upload, no download, that's the game # return True # don't close connection try: message = bdecode(message[1:]) except: print_exc() return False if not isinstance(message, dict): return False try: infohash = message['torrent_hash'] if not isValidInfohash(infohash): # 19/02/10 Boudewijn: isValidInfohash either returns # True or raises a ValueError. So this part of the # code will never be reached... return False assert isinstance( infohash, str), "INFOHASH has invalid type: %s" % type(infohash) assert len( infohash ) == INFOHASH_LENGTH, "INFOHASH has invalid length: %d" % len( infohash) #print >>sys.stderr,"metadata: got_metadata: hexinfohash: get_collected_torrent_filename(infohash) if not infohash in self.requested_torrents: # got a torrent which was not requested return True if self.torrent_db.hasMetaData(infohash): return True # P2PURL goturl = False if selversion >= OLPROTO_VER_ELEVENTH: if 'metatype' in message and message[ 'metatype'] == URL_MIME_TYPE: try: tdef = TorrentDef.load_from_url(message['metadata']) # Internal storage format is still .torrent file metainfo = tdef.get_metainfo() metadata = bencode(metainfo) goturl = True except: print_exc() return False else: metadata = message['metadata'] else: metadata = message['metadata'] if not self.valid_metadata(infohash, metadata): return False if DEBUG: torrent_size = len(metadata) if goturl: mdt = "URL" else: mdt = "torrent" print >> sys.stderr, "metadata: Recvd", mdt, ` infohash `, sha( infohash).hexdigest(), torrent_size extra_info = {} if selversion >= OLPROTO_VER_FOURTH: try: extra_info = { 'leecher': message.get('leecher', -1), 'seeder': message.get('seeder', -1), 'last_check_time': message.get('last_check_time', -1), 'status': message.get('status', 'unknown') } except Exception, msg: print_exc() print >> sys.stderr, "metadata: wrong extra info in msg - ", message extra_info = {} filename = self.save_torrent(infohash, metadata, extra_info=extra_info) self.requested_torrents.remove(infohash) #if DEBUG: # print >>sys.stderr,"metadata: Was I asked to relay for someone", self.proxy_message_handler if filename is not None: self.notify_torrent_is_in(infohash, metadata, filename) # BarterCast: add bytes of torrent to BarterCastDB # Save exchanged KBs in BarterCastDB if permid is not None and BARTERCAST_TORRENTS: self.overlay_bridge.add_task( lambda: self.olthread_bartercast_torrentexchange( permid, 'downloaded'), 0)
def got_metadata(self, permid, message, selversion): """ receive torrent file from others """ # Arno, 2007-06-20: Disabled the following code. What's this? Somebody sends # us something and we refuse? Also doesn't take into account download help #and remote-query extension. #if self.upload_rate <= 0: # if no upload, no download, that's the game # return True # don't close connection try: message = bdecode(message[1:]) except: print_exc() return False if not isinstance(message, dict): return False try: infohash = message['torrent_hash'] if not isValidInfohash(infohash): return False if not infohash in self.requested_torrents: # got a torrent which was not requested return True if self.torrent_db.hasMetaData(infohash): return True # P2PURL goturl = False if selversion >= OLPROTO_VER_ELEVENTH: if 'metatype' in message and message['metatype'] == URL_MIME_TYPE: try: tdef = TorrentDef.load_from_url(metadata['metadata']) # Internal storage format is still .torrent file metainfo = tdef.get_metainfo() metadata = bencode(metainfo) goturl = True except: print_exc() return False else: metadata = message['metadata'] else: metadata = message['metadata'] if not self.valid_metadata(infohash, metadata): return False if DEBUG: torrent_size = len(metadata) if goturl: mdt = "URL" else: mdt = "torrent" print >> sys.stderr,time.asctime(),'-', "metadata: Recvd",mdt,`infohash`,sha(infohash).hexdigest(), torrent_size extra_info = {} if selversion >= OLPROTO_VER_FOURTH: try: extra_info = {'leecher': message.get('leecher', -1), 'seeder': message.get('seeder', -1), 'last_check_time': message.get('last_check_time', -1), 'status':message.get('status', 'unknown')} except Exception, msg: print_exc() print >> sys.stderr, time.asctime(),'-', "metadata: wrong extra info in msg - ", message extra_info = {} filename = self.save_torrent(infohash, metadata, extra_info=extra_info) self.requested_torrents.remove(infohash) #if DEBUG: # print >>sys.stderr,time.asctime(),'-', "metadata: Was I asked to dlhelp someone",self.dlhelper if filename is not None: self.notify_torrent_is_in(infohash,metadata,filename) # BarterCast: add bytes of torrent to BarterCastDB # Save exchanged KBs in BarterCastDB if permid is not None and BARTERCAST_TORRENTS: self.overlay_bridge.add_task(lambda:self.olthread_bartercast_torrentexchange(permid, 'downloaded'), 0)
def got_metadata(self, permid, message, selversion): """ receive torrent file from others """ # Arno, 2007-06-20: Disabled the following code. What's this? Somebody sends # us something and we refuse? Also doesn't take into account download help # and remote-query extension. # if self.upload_rate <= 0: # if no upload, no download, that's the game # return True # don't close connection try: message = bdecode(message[1:]) except: print_exc() return False if not isinstance(message, dict): return False try: infohash = message["torrent_hash"] if not isValidInfohash(infohash): # 19/02/10 Boudewijn: isValidInfohash either returns # True or raises a ValueError. So this part of the # code will never be reached... return False assert isinstance(infohash, str), "INFOHASH has invalid type: %s" % type(infohash) assert len(infohash) == INFOHASH_LENGTH, "INFOHASH has invalid length: %d" % len(infohash) # print >>sys.stderr,"metadata: got_metadata: hexinfohash: get_collected_torrent_filename(infohash) if not infohash in self.requested_torrents: # got a torrent which was not requested return True if self.torrent_db.hasMetaData(infohash): return True # P2PURL goturl = False if selversion >= OLPROTO_VER_ELEVENTH: if "metatype" in message and message["metatype"] == URL_MIME_TYPE: try: tdef = TorrentDef.load_from_url(message["metadata"]) # Internal storage format is still .torrent file metainfo = tdef.get_metainfo() metadata = bencode(metainfo) goturl = True except: print_exc() return False else: metadata = message["metadata"] else: metadata = message["metadata"] if not self.valid_metadata(infohash, metadata): return False if DEBUG: torrent_size = len(metadata) if goturl: mdt = "URL" else: mdt = "torrent" print >>sys.stderr, "metadata: Recvd", mdt, ` infohash `, sha(infohash).hexdigest(), torrent_size extra_info = {} if selversion >= OLPROTO_VER_FOURTH: try: extra_info = { "leecher": message.get("leecher", -1), "seeder": message.get("seeder", -1), "last_check_time": message.get("last_check_time", -1), "status": message.get("status", "unknown"), } except Exception, msg: print_exc() print >>sys.stderr, "metadata: wrong extra info in msg - ", message extra_info = {} filename = self.save_torrent(infohash, metadata, extra_info=extra_info) self.requested_torrents.remove(infohash) # if DEBUG: # print >>sys.stderr,"metadata: Was I asked to relay for someone", self.proxy_message_handler if filename is not None: self.notify_torrent_is_in(infohash, metadata, filename) # BarterCast: add bytes of torrent to BarterCastDB # Save exchanged KBs in BarterCastDB if permid is not None and BARTERCAST_TORRENTS: self.overlay_bridge.add_task(lambda: self.olthread_bartercast_torrentexchange(permid, "downloaded"), 0)
def recv_query_reply(self,permid,message,selversion): #print "****** recv query reply", len(message) if selversion < OLPROTO_VER_SIXTH: return False #if len(message) > MAX_QUERY_REPLY_LEN: # return True # don't close # Unpack try: d = bdecode(message[1:]) except: if DEBUG: print >>sys.stderr,"rquery: Cannot bdecode QUERY_REPLY message", selversion return False if not isValidQueryReply(d,selversion): if DEBUG: print >>sys.stderr,"rquery: not valid QUERY_REPLY message", selversion return False # Check auth queryrec = self.is_registered_query_id(d['id']) if not queryrec: if DEBUG: print >>sys.stderr,"rquery: QUERY_REPLY has unknown query ID", selversion return False if selversion >= OLPROTO_VER_TWELFTH: if queryrec['query'].startswith('SIMPLE+METADATA'): for infohash,torrentrec in d['a'].iteritems(): if not 'metatype' in torrentrec: if DEBUG: print >>sys.stderr,"rquery: QUERY_REPLY has no metatype field", selversion return False if not 'metadata' in torrentrec: if DEBUG: print >>sys.stderr,"rquery: QUERY_REPLY has no metadata field", selversion return False if torrentrec['torrent_size'] != len(torrentrec['metadata']): if DEBUG: print >>sys.stderr,"rquery: QUERY_REPLY torrent_size != len metadata", selversion return False try: # Validity test if torrentrec['metatype'] == URL_MIME_TYPE: tdef = TorrentDef.load_from_url(torrentrec['metadata']) else: metainfo = bdecode(torrentrec['metadata']) tdef = TorrentDef.load_from_dict(metainfo) except: if DEBUG: print_exc() return False # Process self.process_query_reply(permid,queryrec['query'],queryrec['usercallback'],d) return True