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 Plugin import PluginManager
|
||||||
from Config import config
|
from Config import config
|
||||||
|
from Debug import Debug
|
||||||
|
from util import helper
|
||||||
import util
|
import util
|
||||||
|
|
||||||
|
|
||||||
|
@ -162,12 +164,25 @@ class SiteAnnouncer(object):
|
||||||
handler = None
|
handler = None
|
||||||
return handler
|
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):
|
def announceTracker(self, tracker, mode="start", num_want=10):
|
||||||
s = time.time()
|
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"))
|
self.site.log.warning("Tracker %s error: Invalid address" % tracker.decode("utf8", "ignore"))
|
||||||
return False
|
return False
|
||||||
protocol, address = tracker.split("://", 1)
|
|
||||||
if tracker not in self.stats:
|
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}
|
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:
|
else:
|
||||||
num_want = 30
|
num_want = 30
|
||||||
|
|
||||||
handler = self.getTrackerHandler(protocol)
|
handler = self.getTrackerHandler(address_parts["protocol"])
|
||||||
error = None
|
error = None
|
||||||
try:
|
try:
|
||||||
if handler:
|
if handler:
|
||||||
peers = handler(address, mode=mode, num_want=num_want)
|
peers = handler(address_parts["address"], mode=mode, num_want=num_want)
|
||||||
else:
|
else:
|
||||||
raise AnnounceError("Unknown protocol: %s" % protocol)
|
raise AnnounceError("Unknown protocol: %s" % address_parts["protocol"])
|
||||||
except Exception, err:
|
except Exception, err:
|
||||||
self.site.log.warning("Tracker %s announce failed: %s in mode %s" % (tracker, str(err).decode("utf8", "ignore"), mode))
|
self.site.log.warning("Tracker %s announce failed: %s in mode %s" % (tracker, str(err).decode("utf8", "ignore"), mode))
|
||||||
error = err
|
error = err
|
||||||
|
@ -237,7 +252,7 @@ class SiteAnnouncer(object):
|
||||||
if config.verbose:
|
if config.verbose:
|
||||||
self.site.log.debug(
|
self.site.log.debug(
|
||||||
"Tracker result: %s://%s (found %s peers, new: %s, total: %s)" %
|
"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
|
return time.time() - s
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue