socks proxy support, disable udp connections support, http bittorrent tracker support, port opened, external ip to stats, only need zeroname site if dont have, dont try to download file that not in content.json, store external ip even if port closed, recreate uirequest class to avoid unfinished requests in some cases

This commit is contained in:
HelloZeroNet 2015-04-12 23:59:22 +02:00
parent b414a75885
commit 4f7e048413
36 changed files with 1927 additions and 80 deletions

View file

@ -16,14 +16,14 @@ status_texts = {
@PluginManager.acceptPlugins
class UiRequest(object):
def __init__(self, server = None):
def __init__(self, server, get, env, start_response):
if server:
self.server = server
self.log = server.log
self.get = {} # Get parameters
self.env = {} # Enviroment settings
self.get = get # Get parameters
self.env = env # Enviroment settings
self.start_response = start_response # Start response function
self.user = None
self.start_response = None # Start response function
# Call the request handler function base on path
@ -214,12 +214,19 @@ class UiRequest(object):
from Debug import DebugMedia
DebugMedia.merge(file_path)
if os.path.isfile(file_path): # File exits
#self.sendHeader(content_type=self.getContentType(file_path)) # ?? Get Exception without this
return self.actionFile(file_path)
else: # File not exits, try to download
site = SiteManager.site_manager.need(address, all_file=False)
self.sendHeader(content_type=self.getContentType(file_path)) # ?? Get Exception without this
result = site.needFile(match.group("inner_path"), priority=1) # Wait until file downloads
return self.actionFile(file_path)
if result:
#self.sendHeader(content_type=self.getContentType(file_path))
return self.actionFile(file_path)
else:
self.log.debug("File not found: %s" % match.group("inner_path"))
self.error404(match.group("inner_path"))
#self.sendHeader(404)
#return "Not found"
else: # Bad url
return self.error404(path)
@ -304,7 +311,7 @@ class UiRequest(object):
raise last_error[0], last_error[1], last_error[2]
else:
self.sendHeader()
yield "No error! :)"
return "No error! :)"
# Just raise an error to get console
@ -353,11 +360,11 @@ class UiRequest(object):
return "<h1>Server error</h1>%s" % cgi.escape(message)
# - Reload for eaiser developing -
def reload(self):
import imp, sys
global UiWebsocket
UiWebsocket = imp.load_source("UiWebsocket", "src/Ui/UiWebsocket.py").UiWebsocket
#reload(sys.modules["User.UserManager"])
#UserManager.reloadModule()
#self.user = UserManager.user_manager.getCurrent()
# - Reload for eaiser developing -
#def reload():
#import imp, sys
#global UiWebsocket
#UiWebsocket = imp.load_source("UiWebsocket", "src/Ui/UiWebsocket.py").UiWebsocket
#reload(sys.modules["User.UserManager"])
#UserManager.reloadModule()
#self.user = UserManager.user_manager.getCurrent()

View file

@ -45,33 +45,34 @@ class UiServer:
self.sites = SiteManager.site_manager.list()
self.log = logging.getLogger(__name__)
self.ui_request = UiRequest(self)
# Handle WSGI request
def handleRequest(self, env, start_response):
path = env["PATH_INFO"]
self.ui_request.env = env
self.ui_request.start_response = start_response
if env.get("QUERY_STRING"):
self.ui_request.get = dict(cgi.parse_qsl(env['QUERY_STRING']))
get = dict(cgi.parse_qsl(env['QUERY_STRING']))
else:
self.ui_request.get = {}
get = {}
ui_request = UiRequest(self, get, env, start_response)
if config.debug: # Let the exception catched by werkezung
return self.ui_request.route(path)
return ui_request.route(path)
else: # Catch and display the error
try:
return self.ui_request.route(path)
return ui_request.route(path)
except Exception, err:
logging.debug("UiRequest error: %s" % Debug.formatException(err))
return self.ui_request.error500("Err: %s" % Debug.formatException(err))
return ui_request.error500("Err: %s" % Debug.formatException(err))
# Reload the UiRequest class to prevent restarts in debug mode
def reload(self):
global UiRequest
import imp, sys
reload(sys.modules["User.UserManager"])
self.ui_request = imp.load_source("UiRequest", "src/Ui/UiRequest.py").UiRequest(self)
self.ui_request.reload()
reload(sys.modules["Ui.UiWebsocket"])
UiRequest = imp.load_source("UiRequest", "src/Ui/UiRequest.py").UiRequest
#UiRequest.reload()
# Bind and run the server

View file

@ -24,9 +24,9 @@ class UiWebsocket(object):
def start(self):
ws = self.ws
if self.site.address == config.homepage and not self.site.page_requested: # Add open fileserver port message or closed port error to homepage at first request after start
if config.ip_external:
if sys.modules["main"].file_server.port_opened == True:
self.site.notifications.append(["done", "Congratulation, your port <b>"+str(config.fileserver_port)+"</b> is opened. <br>You are full member of ZeroNet network!", 10000])
elif config.ip_external == False:
elif sys.modules["main"].file_server.port_opened == False:
self.site.notifications.append(["error", "Your network connection is restricted. Please, open <b>"+str(config.fileserver_port)+"</b> port <br>on your router to become full member of ZeroNet network.", 0])
self.site.page_requested = True # Dont add connection notification anymore
@ -41,7 +41,6 @@ class UiWebsocket(object):
except Exception, err:
if err.message != 'Connection is already closed':
if config.debug: # Allow websocket errors to appear on /Debug
import sys
sys.modules["main"].DebugHook.handleError()
self.log.error("WebSocket error: %s" % Debug.formatException(err))
return "Bye."
@ -213,7 +212,7 @@ class UiWebsocket(object):
def formatServerInfo(self):
return {
"ip_external": bool(config.ip_external),
"ip_external": bool(sys.modules["main"].file_server.port_opened),
"platform": sys.platform,
"fileserver_ip": config.fileserver_ip,
"fileserver_port": config.fileserver_port,
@ -401,7 +400,6 @@ class UiWebsocket(object):
def actionServerUpdate(self, to):
import sys
self.cmd("updating")
sys.modules["main"].update_after_shutdown = True
sys.modules["main"].file_server.stop()