Separate function for parsing tracker addresses

This commit is contained in:
shortcutme 2019-01-20 16:29:38 +01:00
parent 626b6f5ccd
commit 7ae98477d5
No known key found for this signature in database
GPG key ID: 5B63BAE6CB9613AE

View file

@ -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