From 5b316180e6176999f42d367aa42b1de2f6ae83cc Mon Sep 17 00:00:00 2001 From: HelloZeroNet Date: Sat, 12 Dec 2015 16:39:22 +0100 Subject: [PATCH] Rev663, Faster SitePublish from command line if fileserver already running, Better OpenSSL lib close for update via webui, Close pyelliptic OpenSSL lib before update --- src/Config.py | 2 +- src/File/FileRequest.py | 11 ++++++ src/lib/opensslVerify/opensslVerify.py | 9 ++++- src/lib/pyelliptic/openssl.py | 1 + src/main.py | 52 ++++++++++++++------------ zeronet.py | 7 +++- 6 files changed, 55 insertions(+), 27 deletions(-) diff --git a/src/Config.py b/src/Config.py index 8ce384cd..62db5fca 100644 --- a/src/Config.py +++ b/src/Config.py @@ -8,7 +8,7 @@ class Config(object): def __init__(self, argv): self.version = "0.3.4" - self.rev = 656 + self.rev = 664 self.argv = argv self.action = None self.createParser() diff --git a/src/File/FileRequest.py b/src/File/FileRequest.py index 41626ef5..bfe39a66 100644 --- a/src/File/FileRequest.py +++ b/src/File/FileRequest.py @@ -74,6 +74,8 @@ class FileRequest(object): self.actionSetHashfield(params) elif cmd == "siteReload": self.actionSiteReload(params) + elif cmd == "sitePublish": + self.actionSitePublish(params) elif cmd == "ping": self.actionPing() else: @@ -331,6 +333,15 @@ class FileRequest(object): self.response({"ok": "Reloaded"}) + def actionSitePublish(self, params): + if self.connection.ip != "127.0.0.1" and self.connection.ip != config.ip_external: + self.response({"error": "Only local host allowed"}) + + site = self.sites.get(params["site"]) + num = site.publish(inner_path=params.get("inner_path", "content.json")) + + self.response({"ok": "Successfuly published to %s peers" % num}) + # Send a simple Pong! answer def actionPing(self): self.response("Pong!") diff --git a/src/lib/opensslVerify/opensslVerify.py b/src/lib/opensslVerify/opensslVerify.py index 5fd9a76d..8ba2e46c 100644 --- a/src/lib/opensslVerify/opensslVerify.py +++ b/src/lib/opensslVerify/opensslVerify.py @@ -396,10 +396,15 @@ def ECDSA_SIG_recover_key_GFp(eckey, r, s, msg, msglen, recid, check): def closeLibrary(): + handle = ssl._lib._handle if "FreeLibrary" in dir(_ctypes): - _ctypes.FreeLibrary(ssl._lib._handle) + _ctypes.FreeLibrary(handle) + _ctypes.FreeLibrary(handle) + print "OpenSSL closed, handle:", handle else: - _ctypes.dlclose(ssl._lib._handle) + _ctypes.dlclose(handle) + _ctypes.dlclose(handle) + print "OpenSSL dlclosed, handle:", handle def getMessagePubkey(message, sig): diff --git a/src/lib/pyelliptic/openssl.py b/src/lib/pyelliptic/openssl.py index eda17668..8dd726e4 100644 --- a/src/lib/pyelliptic/openssl.py +++ b/src/lib/pyelliptic/openssl.py @@ -440,6 +440,7 @@ def openLibrary(): def closeLibrary(): + import _ctypes if "FreeLibrary" in dir(_ctypes): _ctypes.FreeLibrary(OpenSSL._lib._handle) else: diff --git a/src/main.py b/src/main.py index 11847799..98cde932 100644 --- a/src/main.py +++ b/src/main.py @@ -231,34 +231,40 @@ class Actions(object): from File import FileServer # We need fileserver to handle incoming file requests from Peer import Peer - logging.info("Creating FileServer....") - file_server = FileServer() - file_server_thread = gevent.spawn(file_server.start, check_sites=False) # Dont check every site integrity - file_server.openport() - + logging.info("Loading site...") site = SiteManager.site_manager.list()[address] site.settings["serving"] = True # Serving the site even if its disabled - # Notify local client on new content - if config.ip_external: - logging.info("Sending siteReload") - my_peer = Peer(config.ip_external, config.fileserver_port) - logging.info(my_peer.request("siteReload", {"site": site.address, "inner_path": inner_path})) + logging.info("Creating FileServer....") + file_server = FileServer() + file_server_thread = gevent.spawn(file_server.start, check_sites=False) # Dont check every site integrity + time.sleep(0) - if peer_ip: # Announce ip specificed - site.addPeer(peer_ip, peer_port) - else: # Just ask the tracker - logging.info("Gathering peers from tracker") - site.announce() # Gather peers - - published = site.publish(20, inner_path) # Push to 20 peers - if published > 0: - time.sleep(3) - logging.info("Serving files (max 60s)...") - gevent.joinall([file_server_thread], timeout=60) - logging.info("Done.") + if not file_server_thread.ready(): + # Started fileserver + file_server.openport() + if peer_ip: # Announce ip specificed + site.addPeer(peer_ip, peer_port) + else: # Just ask the tracker + logging.info("Gathering peers from tracker") + site.announce() # Gather peers + published = site.publish(20, inner_path) # Push to 20 peers + if published > 0: + time.sleep(3) + logging.info("Serving files (max 60s)...") + gevent.joinall([file_server_thread], timeout=60) + logging.info("Done.") + else: + logging.info("No peers found, sitePublish command only works if you already have visitors serving your site") else: - logging.info("No peers found, sitePublish command only works if you already have visitors serving your site") + # Notify local client on new content + logging.info("Sending siteReload") + my_peer = Peer("127.0.0.1", config.fileserver_port) + logging.info(my_peer.request("siteReload", {"site": site.address, "inner_path": inner_path})) + logging.info("Sending sitePublish") + logging.info(my_peer.request("sitePublish", {"site": site.address, "inner_path": inner_path})) + logging.info("Done.") + # Crypto commands def cryptPrivatekeyToAddress(self, privatekey=None): diff --git a/zeronet.py b/zeronet.py index a287d1f1..959699c8 100644 --- a/zeronet.py +++ b/zeronet.py @@ -21,7 +21,12 @@ def main(): if "lib.opensslVerify" in sys.modules: sys.modules["lib.opensslVerify"].opensslVerify.closeLibrary() except Exception, err: - print "Error closing openssl", err + print "Error closing opensslVerify lib", err + try: + if "lib.pyelliptic" in sys.modules: + sys.modules["lib.pyelliptic"].openssl.closeLibrary() + except Exception, err: + print "Error closing pyelliptic lib", err # Update update.update()