From 7ae98477d514af9d101064e5c9b1fec26dc79485 Mon Sep 17 00:00:00 2001 From: shortcutme Date: Sun, 20 Jan 2019 16:29:38 +0100 Subject: [PATCH] Separate function for parsing tracker addresses --- src/Site/SiteAnnouncer.py | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/src/Site/SiteAnnouncer.py b/src/Site/SiteAnnouncer.py index 8e9c03cc..847905c3 100644 --- a/src/Site/SiteAnnouncer.py +++ b/src/Site/SiteAnnouncer.py @@ -16,6 +16,8 @@ import gevent from Plugin import PluginManager from Config import config +from Debug import Debug +from util import helper import util @@ -162,12 +164,25 @@ class SiteAnnouncer(object): handler = None return handler + def getAddressParts(self, tracker): + if "://" not in tracker or not re.match("^[A-Za-z0-9:/\\.#-]+$", tracker): + return None + protocol, address = tracker.split("://", 1) + ip, port = address.rsplit(":", 1) + back = {} + back["protocol"] = protocol + back["address"] = address + back["ip"] = ip + back["port"] = port + return back + def announceTracker(self, tracker, mode="start", num_want=10): s = time.time() - if "://" not in tracker or not re.match("^[A-Za-z0-9:/\\.#-]+$", tracker): + address_parts = self.getAddressParts(tracker) + if not address_parts: self.site.log.warning("Tracker %s error: Invalid address" % tracker.decode("utf8", "ignore")) return False - protocol, address = tracker.split("://", 1) + if tracker not in self.stats: self.stats[tracker] = {"status": "", "num_request": 0, "num_success": 0, "num_error": 0, "time_request": 0, "time_last_error": 0} @@ -182,13 +197,13 @@ class SiteAnnouncer(object): else: num_want = 30 - handler = self.getTrackerHandler(protocol) + handler = self.getTrackerHandler(address_parts["protocol"]) error = None try: if handler: - peers = handler(address, mode=mode, num_want=num_want) + peers = handler(address_parts["address"], mode=mode, num_want=num_want) else: - raise AnnounceError("Unknown protocol: %s" % protocol) + raise AnnounceError("Unknown protocol: %s" % address_parts["protocol"]) except Exception, err: self.site.log.warning("Tracker %s announce failed: %s in mode %s" % (tracker, str(err).decode("utf8", "ignore"), mode)) error = err @@ -237,7 +252,7 @@ class SiteAnnouncer(object): if config.verbose: self.site.log.debug( "Tracker result: %s://%s (found %s peers, new: %s, total: %s)" % - (protocol, address, len(peers), added, len(self.site.peers)) + (address_parts["protocol"], address_parts["address"], len(peers), added, len(self.site.peers)) ) return time.time() - s