Rev859, Don't display port closed warning in Tor always mode, Reload trackers files every minute, Log users.json save time, Use Udp connect to avoid Gevent lockdown bug, Site needfile startup command, Log uPnP punch targets

This commit is contained in:
HelloZeroNet 2016-01-19 20:42:00 +01:00
parent 2121612a72
commit 7d25812087
7 changed files with 35 additions and 9 deletions

View file

@ -8,7 +8,7 @@ class Config(object):
def __init__(self, argv): def __init__(self, argv):
self.version = "0.3.5" self.version = "0.3.5"
self.rev = 843 self.rev = 859
self.argv = argv self.argv = argv
self.action = None self.action = None
self.createParser() self.createParser()
@ -53,6 +53,11 @@ class Config(object):
# SiteCreate # SiteCreate
action = self.subparsers.add_parser("siteCreate", help='Create a new site') action = self.subparsers.add_parser("siteCreate", help='Create a new site')
# SiteNeedFile
action = self.subparsers.add_parser("siteNeedFile", help='Get a file from site')
action.add_argument('address', help='Site address')
action.add_argument('inner_path', help='File inner path')
# SiteSign # SiteSign
action = self.subparsers.add_parser("siteSign", help='Update and sign content.json: address [privatekey]') action = self.subparsers.add_parser("siteSign", help='Update and sign content.json: address [privatekey]')
action.add_argument('address', help='Site to sign') action.add_argument('address', help='Site to sign')

View file

@ -91,7 +91,8 @@ class FileServer(ConnectionServer):
data = "" data = ""
if "closed" in message or "Error" in message: if "closed" in message or "Error" in message:
self.log.info("[BAD :(] Port closed: %s" % message) if config.tor != "always":
self.log.info("[BAD :(] Port closed: %s" % message)
if port == self.port: if port == self.port:
self.port_opened = False # Self port, update port_opened status self.port_opened = False # Self port, update port_opened status
match = re.match(".*targetIP.*?value=\"(.*?)\"", data, re.DOTALL) # Try find my external ip in message match = re.match(".*targetIP.*?value=\"(.*?)\"", data, re.DOTALL) # Try find my external ip in message
@ -123,7 +124,8 @@ class FileServer(ConnectionServer):
message = "Error: %s" % Debug.formatException(err) message = "Error: %s" % Debug.formatException(err)
if "Error" in message: if "Error" in message:
self.log.info("[BAD :(] Port closed: %s" % message) if config.tor != "always":
self.log.info("[BAD :(] Port closed: %s" % message)
if port == self.port: if port == self.port:
self.port_opened = False # Self port, update port_opened status self.port_opened = False # Self port, update port_opened status
match = re.match(".*?([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)", message) # Try find my external ip in message match = re.match(".*?([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)", message) # Try find my external ip in message
@ -178,13 +180,18 @@ class FileServer(ConnectionServer):
time.sleep(2) # Prevent too quick request time.sleep(2) # Prevent too quick request
site = None site = None
def trackersFileReloader(self):
while 1:
config.loadTrackersFile()
time.sleep(60)
# Announce sites every 20 min # Announce sites every 20 min
def announceSites(self): def announceSites(self):
import gc import gc
if config.trackers_file:
gevent.spawn(self.trackersFileReloader)
while 1: while 1:
# Sites health care every 20 min # Sites health care every 20 min
if config.trackers_file:
config.loadTrackersFile()
for address, site in self.sites.items(): for address, site in self.sites.items():
if not site.settings["serving"]: if not site.settings["serving"]:
continue continue
@ -209,8 +216,6 @@ class FileServer(ConnectionServer):
# Find new peers # Find new peers
for tracker_i in range(len(config.trackers)): for tracker_i in range(len(config.trackers)):
time.sleep(60 * 20 / len(config.trackers)) # Query all trackers one-by-one in 20 minutes evenly distributed time.sleep(60 * 20 / len(config.trackers)) # Query all trackers one-by-one in 20 minutes evenly distributed
if config.trackers_file:
config.loadTrackersFile()
for address, site in self.sites.items(): for address, site in self.sites.items():
if not site.settings["serving"]: if not site.settings["serving"]:
continue continue

BIN
src/Test/testdata/bootstrapper.db vendored Normal file

Binary file not shown.

View file

@ -27,6 +27,7 @@ class User(object):
# Save to data/users.json # Save to data/users.json
def save(self): def save(self):
s = time.time()
users = json.load(open("%s/users.json" % config.data_dir)) users = json.load(open("%s/users.json" % config.data_dir))
if self.master_address not in users: if self.master_address not in users:
users[self.master_address] = {} # Create if not exist users[self.master_address] = {} # Create if not exist
@ -36,7 +37,7 @@ class User(object):
user_data["sites"] = self.sites user_data["sites"] = self.sites
user_data["certs"] = self.certs user_data["certs"] = self.certs
helper.atomicWrite("%s/users.json" % config.data_dir, json.dumps(users, indent=2, sort_keys=True)) helper.atomicWrite("%s/users.json" % config.data_dir, json.dumps(users, indent=2, sort_keys=True))
self.log.debug("Saved") self.log.debug("Saved in %.3fs" % (time.time()-s))
def getAddressAuthIndex(self, address): def getAddressAuthIndex(self, address):
return int(address.encode("hex"), 16) return int(address.encode("hex"), 16)
@ -120,6 +121,7 @@ class User(object):
self.save() self.save()
return True return True
# Set active cert for a site
def setCert(self, address, domain): def setCert(self, address, domain):
site_data = self.getSiteData(address) site_data = self.getSiteData(address)
if domain: if domain:

View file

@ -123,7 +123,8 @@ class UdpTrackerClient:
'payload': payload, 'payload': payload,
'completed': False, 'completed': False,
} }
self.sock.sendto(header + payload, (self.host, self.port)) self.sock.connect((self.host, self.port))
self.sock.send(header + payload)
return trans return trans
def _request_header(self, action): def _request_header(self, action):

View file

@ -237,6 +237,18 @@ class Actions(object):
def siteNeedFile(self, address, inner_path): def siteNeedFile(self, address, inner_path):
from Site import Site from Site import Site
def checker():
while 1:
s = time.time()
time.sleep(1)
print time.time()-s
gevent.spawn(checker)
logging.info("Opening a simple connection server")
global file_server
from Connection import ConnectionServer
file_server = ConnectionServer("127.0.0.1", 1234)
site = Site(address) site = Site(address)
site.announce() site.announce()
print site.needFile(inner_path, update=True) print site.needFile(inner_path, update=True)

View file

@ -171,6 +171,7 @@ def _send_soap_request(location, upnp_schema, control_url, soap_message):
), ),
'Content-Type': 'text/xml' 'Content-Type': 'text/xml'
} }
logging.debug("Sending UPnP request to {0}:{1}...".format(location.hostname, location.port))
conn = httplib.HTTPConnection(location.hostname, location.port) conn = httplib.HTTPConnection(location.hostname, location.port)
conn.request('POST', control_url, soap_message, headers) conn.request('POST', control_url, soap_message, headers)