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:
parent
b414a75885
commit
4f7e048413
36 changed files with 1927 additions and 80 deletions
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue