Separate function for parsing tracker addresses
This commit is contained in:
parent
626b6f5ccd
commit
7ae98477d5
1 changed files with 21 additions and 6 deletions
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in a new issue