diff --git a/plugins/AnnounceZero/AnnounceZeroPlugin.py b/plugins/AnnounceZero/AnnounceZeroPlugin.py index 34833d06..dcaa04f0 100644 --- a/plugins/AnnounceZero/AnnounceZeroPlugin.py +++ b/plugins/AnnounceZero/AnnounceZeroPlugin.py @@ -69,7 +69,7 @@ class SiteAnnouncerPlugin(object): return None time_full_announced[tracker_address] = time.time() from Site import SiteManager - sites = [site for site in SiteManager.site_manager.sites.values() if site.settings["serving"]] + sites = [site for site in SiteManager.site_manager.sites.values() if site.isServing()] # Create request add_types = self.getOpenedServiceTypes() diff --git a/plugins/Bigfile/BigfilePlugin.py b/plugins/Bigfile/BigfilePlugin.py index be2f7b66..e83aa712 100644 --- a/plugins/Bigfile/BigfilePlugin.py +++ b/plugins/Bigfile/BigfilePlugin.py @@ -628,7 +628,7 @@ class FileRequestPlugin(object): def actionGetPiecefields(self, params): site = self.sites.get(params["site"]) - if not site or not site.settings["serving"]: # Site unknown or not serving + if not site or not site.isServing(): # Site unknown or not serving self.response({"error": "Unknown site"}) return False @@ -642,7 +642,7 @@ class FileRequestPlugin(object): def actionSetPiecefields(self, params): site = self.sites.get(params["site"]) - if not site or not site.settings["serving"]: # Site unknown or not serving + if not site or not site.isServing(): # Site unknown or not serving self.response({"error": "Unknown site"}) self.connection.badAction(5) return False diff --git a/plugins/OptionalManager/ContentDbPlugin.py b/plugins/OptionalManager/ContentDbPlugin.py index b9f6552a..e7945d93 100644 --- a/plugins/OptionalManager/ContentDbPlugin.py +++ b/plugins/OptionalManager/ContentDbPlugin.py @@ -224,7 +224,7 @@ class ContentDbPlugin(object): for site in list(self.sites.values()): if not site.content_manager.has_optional_files: continue - if not site.settings["serving"]: + if not site.isServing(): continue has_updated_hashfield = next(( peer diff --git a/plugins/Sidebar/SidebarPlugin.py b/plugins/Sidebar/SidebarPlugin.py index 90e07bcb..99aad5a7 100644 --- a/plugins/Sidebar/SidebarPlugin.py +++ b/plugins/Sidebar/SidebarPlugin.py @@ -91,7 +91,7 @@ class UiWebsocketPlugin(object): peers_total = len(site.peers) # Add myself - if site.settings["serving"]: + if site.isServing(): peers_total += 1 if any(site.connection_server.port_opened.values()): connectable += 1 diff --git a/src/Config.py b/src/Config.py index a1ac637b..9d800851 100644 --- a/src/Config.py +++ b/src/Config.py @@ -241,6 +241,7 @@ class Config(object): self.parser.add_argument('--fileserver_ip_type', help='FileServer ip type', default="dual", choices=["ipv4", "ipv6", "dual"]) self.parser.add_argument('--ip_local', help='My local ips', default=ip_local, type=int, metavar='ip', nargs='*') self.parser.add_argument('--ip_external', help='Set reported external ip (tested on start if None)', metavar='ip', nargs='*') + self.parser.add_argument('--offline', help='Disable network communication', action='store_true') self.parser.add_argument('--disable_udp', help='Disable UDP connections', action='store_true') self.parser.add_argument('--proxy', help='Socks proxy address', metavar='ip:port') diff --git a/src/File/FileRequest.py b/src/File/FileRequest.py index 98bda0ca..8fdfaf43 100644 --- a/src/File/FileRequest.py +++ b/src/File/FileRequest.py @@ -103,7 +103,7 @@ class FileRequest(object): # Update a site file request def actionUpdate(self, params): site = self.sites.get(params["site"]) - if not site or not site.settings["serving"]: # Site unknown or not serving + if not site or not site.isServing(): # Site unknown or not serving self.response({"error": "Unknown site"}) self.connection.badAction(1) self.connection.badAction(5) @@ -192,7 +192,7 @@ class FileRequest(object): # Send file content request def handleGetFile(self, params, streaming=False): site = self.sites.get(params["site"]) - if not site or not site.settings["serving"]: # Site unknown or not serving + if not site or not site.isServing(): # Site unknown or not serving self.response({"error": "Unknown site"}) self.connection.badAction(5) return False @@ -270,7 +270,7 @@ class FileRequest(object): # Peer exchange request def actionPex(self, params): site = self.sites.get(params["site"]) - if not site or not site.settings["serving"]: # Site unknown or not serving + if not site or not site.isServing(): # Site unknown or not serving self.response({"error": "Unknown site"}) self.connection.badAction(5) return False @@ -321,7 +321,7 @@ class FileRequest(object): # Get modified content.json files since def actionListModified(self, params): site = self.sites.get(params["site"]) - if not site or not site.settings["serving"]: # Site unknown or not serving + if not site or not site.isServing(): # Site unknown or not serving self.response({"error": "Unknown site"}) self.connection.badAction(5) return False @@ -336,7 +336,7 @@ class FileRequest(object): def actionGetHashfield(self, params): site = self.sites.get(params["site"]) - if not site or not site.settings["serving"]: # Site unknown or not serving + if not site or not site.isServing(): # Site unknown or not serving self.response({"error": "Unknown site"}) self.connection.badAction(5) return False @@ -364,7 +364,7 @@ class FileRequest(object): def actionFindHashIds(self, params): site = self.sites.get(params["site"]) s = time.time() - if not site or not site.settings["serving"]: # Site unknown or not serving + if not site or not site.isServing(): # Site unknown or not serving self.response({"error": "Unknown site"}) self.connection.badAction(5) return False @@ -392,7 +392,7 @@ class FileRequest(object): def actionSetHashfield(self, params): site = self.sites.get(params["site"]) - if not site or not site.settings["serving"]: # Site unknown or not serving + if not site or not site.isServing(): # Site unknown or not serving self.response({"error": "Unknown site"}) self.connection.badAction(5) return False diff --git a/src/File/FileServer.py b/src/File/FileServer.py index 8c9ac115..599aaaae 100644 --- a/src/File/FileServer.py +++ b/src/File/FileServer.py @@ -216,7 +216,7 @@ class FileServer(ConnectionServer): # Check site file integrity def checkSite(self, site, check_files=False): - if site.settings["serving"]: + if site.isServing(): site.announce(mode="startup") # Announce site to tracker site.update(check_files=check_files) # Update site's content.json and download changed files site.sendMyHashfield() @@ -243,7 +243,7 @@ class FileServer(ConnectionServer): check_pool = gevent.pool.Pool(5) # Check sites integrity for site in sorted(list(self.sites.values()), key=lambda site: site.settings.get("modified", 0), reverse=True): - if not site.settings["serving"]: + if not site.isServing(): continue check_thread = check_pool.spawn(self.checkSite, site, check_files) # Check in new thread time.sleep(2) @@ -264,7 +264,7 @@ class FileServer(ConnectionServer): ) for address, site in list(self.sites.items()): - if not site.settings["serving"]: + if not site.isServing(): continue if not startup: @@ -274,7 +274,7 @@ class FileServer(ConnectionServer): peers_protected = set([]) for address, site in list(self.sites.items()): - if not site.settings["serving"]: + if not site.isServing(): continue if site.peers: @@ -314,7 +314,7 @@ class FileServer(ConnectionServer): config.loadTrackersFile() s = time.time() for address, site in list(self.sites.items()): - if not site.settings["serving"]: + if not site.isServing(): continue gevent.spawn(self.announceSite, site).join(timeout=10) time.sleep(1) diff --git a/src/Site/Site.py b/src/Site/Site.py index 1a45066f..a37e1149 100644 --- a/src/Site/Site.py +++ b/src/Site/Site.py @@ -127,6 +127,12 @@ class Site(object): SiteManager.site_manager.load(False) SiteManager.site_manager.save() + def isServing(self): + if config.offline: + return False + else: + return self.settings["serving"] + def getSettingsCache(self): back = {} back["bad_files"] = self.bad_files @@ -736,7 +742,7 @@ class Site(object): def needFile(self, inner_path, update=False, blocking=True, peer=None, priority=0): if self.storage.isFile(inner_path) and not update: # File exist, no need to do anything return True - elif self.settings["serving"] is False: # Site not serving + elif not self.isServing(): # Site not serving return False else: # Wait until file downloaded self.bad_files[inner_path] = self.bad_files.get(inner_path, 0) + 1 # Mark as bad file diff --git a/src/Ui/UiRequest.py b/src/Ui/UiRequest.py index b4f4235a..dd3653e0 100644 --- a/src/Ui/UiRequest.py +++ b/src/Ui/UiRequest.py @@ -358,7 +358,7 @@ class UiRequest(object): self.sendHeader(extra_headers=extra_headers, script_nonce=script_nonce) min_last_announce = (time.time() - site.announcer.time_last_announce) / 60 - if min_last_announce > 60 and site.settings["serving"] and not just_added: + if min_last_announce > 60 and site.isServing() and not just_added: site.log.debug("Site requested, but not announced recently (last %.0fmin ago). Updating..." % min_last_announce) gevent.spawn(site.update, announce=True)