MCPcopy Index your code
hub / github.com/HelloZeroNet/ZeroNet / FileServer

Class FileServer

src/File/FileServer.py:22–376  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

20
21@PluginManager.acceptPlugins
22class FileServer(ConnectionServer):
23
24 def __init__(self, ip=config.fileserver_ip, port=config.fileserver_port, ip_type=config.fileserver_ip_type):
25 self.site_manager = SiteManager.site_manager
26 self.portchecker = PeerPortchecker.PeerPortchecker(self)
27 self.log = logging.getLogger("FileServer")
28 self.ip_type = ip_type
29 self.ip_external_list = []
30
31 self.supported_ip_types = ["ipv4"] # Outgoing ip_type support
32 if helper.getIpType(ip) == "ipv6" or self.isIpv6Supported():
33 self.supported_ip_types.append("ipv6")
34
35 if ip_type == "ipv6" or (ip_type == "dual" and "ipv6" in self.supported_ip_types):
36 ip = ip.replace("*", "::")
37 else:
38 ip = ip.replace("*", "0.0.0.0")
39
40 if config.tor == "always":
41 port = config.tor_hs_port
42 config.fileserver_port = port
43 elif port == 0: # Use random port
44 port_range_from, port_range_to = list(map(int, config.fileserver_port_range.split("-")))
45 port = self.getRandomPort(ip, port_range_from, port_range_to)
46 config.fileserver_port = port
47 if not port:
48 raise Exception("Can't find bindable port")
49 if not config.tor == "always":
50 config.saveValue("fileserver_port", port) # Save random port value for next restart
51
52 ConnectionServer.__init__(self, ip, port, self.handleRequest)
53 self.log.debug("Supported IP types: %s" % self.supported_ip_types)
54
55 if ip_type == "dual" and ip == "::":
56 # Also bind to ipv4 addres in dual mode
57 try:
58 self.log.debug("Binding proxy to %s:%s" % ("::", self.port))
59 self.stream_server_proxy = StreamServer(
60 ("0.0.0.0", self.port), self.handleIncomingConnection, spawn=self.pool, backlog=100
61 )
62 except Exception as err:
63 self.log.info("StreamServer proxy create error: %s" % Debug.formatException(err))
64
65 self.port_opened = {}
66
67 self.sites = {}
68 self.last_request = time.time()
69 self.files_parsing = {}
70 self.ui_server = None
71
72 def getRandomPort(self, ip, port_range_from, port_range_to):
73 self.log.info("Getting random port in range %s-%s..." % (port_range_from, port_range_to))
74 tried = []
75 for bind_retry in range(100):
76 port = random.randint(port_range_from, port_range_to)
77 if port in tried:
78 continue
79 tried.append(port)

Callers 15

mainMethod · 0.90
siteAnnounceMethod · 0.90
siteDownloadMethod · 0.90
siteNeedFileMethod · 0.90
sitePublishMethod · 0.90
__init__Method · 0.90
testPingMethod · 0.90
testDownloadFileMethod · 0.90
testHashfieldExchangeMethod · 0.90
testFindHashMethod · 0.90
file_server4Function · 0.90
file_server6Function · 0.90

Calls

no outgoing calls

Tested by 15

testPingMethod · 0.72
testDownloadFileMethod · 0.72
testHashfieldExchangeMethod · 0.72
testFindHashMethod · 0.72
file_server4Function · 0.72
file_server6Function · 0.72
testPexMethod · 0.72
testFindHashMethod · 0.72
testPexMethod · 0.72
testRenameMethod · 0.72
testRenameOptionalMethod · 0.72
testArchivedDownloadMethod · 0.72