Rev663, Faster SitePublish from command line if fileserver already running, Better OpenSSL lib close for update via webui, Close pyelliptic OpenSSL lib before update

This commit is contained in:
HelloZeroNet 2015-12-12 16:39:22 +01:00
parent ee70e2f022
commit 5b316180e6
6 changed files with 55 additions and 27 deletions

View File

@ -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()

View File

@ -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!")

View File

@ -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):

View File

@ -440,6 +440,7 @@ def openLibrary():
def closeLibrary():
import _ctypes
if "FreeLibrary" in dir(_ctypes):
_ctypes.FreeLibrary(OpenSSL._lib._handle)
else:

View File

@ -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):

View File

@ -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()