def cmd_recover(opts, args, overDict): if len(args) < 2: return 2 src = dhnio.ReadBinaryFile(args[1]) if len(src) > 1024*10: print 'file is too big for private key' return 0 try: lines = src.split('\n') idurl = lines[0] txt = '\n'.join(lines[1:]) if idurl != nameurl.FilenameUrl(nameurl.UrlFilename(idurl)): idurl = '' txt = src except: #dhnio.DprintException() idurl = '' txt = src if idurl == '' and len(args) >= 3: idurl = args[2] if not idurl.startswith('http://'): idurl = 'http://'+settings.IdentityServerName()+'/'+idurl+'.xml' if idurl == '': print 'DataHaven.NET need to know your username to recover your account\n' return 2 import lib.automat as automat import initializer import shutdowner initializer.A('run-cmd-line-recover', { 'idurl': idurl, 'keysrc': txt }) reactor.run() #initializer.A('reactor-stopped', use_reactor = False) shutdowner.A('reactor-stopped') automat.objects().clear() print return 0
def cmd_register(opts, args, overDict): if len(args) < 2: return 2 if len(args) >= 3: import lib.settings as settings settings.uconfig().set('backup.private-key-size', str(args[2])) settings.uconfig().update() import lib.automat as automat import initializer import shutdowner initializer.A('run-cmd-line-register', args[1]) reactor.run() shutdowner.A('reactor-stopped') automat.objects().clear() print return 0
def TransportUDPSessionStateChanged(automatindex, oldstate, newstate): if newstate != 'CONNECTED': return sess = automat.objects().get(automatindex, None) if sess is None: return idurl = sess.remote_idurl if idurl is None: return if contact_status.isOffline(idurl): A('ping-contact', idurl)
def doDestroyMe(self, arg): global _Initializer del _Initializer _Initializer = None automat.objects().pop(self.index)
def doDestroyMe(self, arg): automat.objects().pop(self.index) collected = gc.collect()
def doDestroyMe(self, arg): self.currentBlockData.close() del self.currentBlockData automat.objects().pop(self.index) collected = gc.collect() dhnio.Dprint(10, 'backup.doDestroyMe [%s] collected %d objects' % (self.backupID, collected))
def run(UI='', options=None, args=None, overDict=None): """ In the method `main()` program firstly checks the command line arguments and then calls this method to start the whole process. This initialize some low level modules and finally create an instance of `initializer()` state machine and send it an event "run". """ import lib.dhnio as dhnio dhnio.Dprint(6, 'dhnmain.run sys.path=%s' % str(sys.path)) #---USE_TRAY_ICON--- try: from dhnicon import USE_TRAY_ICON dhnio.Dprint(4, 'dhnmain.run USE_TRAY_ICON='+str(USE_TRAY_ICON)) if dhnio.Linux() and not dhnio.X11_is_running(): USE_TRAY_ICON = False if USE_TRAY_ICON: from twisted.internet import wxreactor wxreactor.install() except: USE_TRAY_ICON = False dhnio.DprintException() if USE_TRAY_ICON: if dhnio.Linux(): icons_dict = { 'red': 'icon-red-24x24.png', 'green': 'icon-green-24x24.png', 'gray': 'icon-gray-24x24.png', } else: icons_dict = { 'red': 'icon-red.png', 'green': 'icon-green.png', 'gray': 'icon-gray.png', } import dhnicon icons_path = str(os.path.abspath(os.path.join(dhnio.getExecutableDir(), 'icons'))) dhnio.Dprint(4, 'dhnmain.run call dhnicon.init(%s)' % icons_path) dhnicon.init(icons_path, icons_dict) def _tray_control_func(cmd): if cmd == 'exit': #import dhninit #dhninit.shutdown_exit() import shutdowner shutdowner.A('stop', 'exit') dhnicon.SetControlFunc(_tray_control_func) dhnio.Dprint(4, 'dhnmain.run want to import twisted.internet.reactor') try: from twisted.internet import reactor except: dhnio.DprintException() sys.exit('Error initializing reactor in dhnmain.py\n') #---settings--- import lib.settings as settings if overDict: settings.override_dict(overDict) settings.init() if not options or options.debug is None: dhnio.SetDebug(settings.getDebugLevel()) #---logfile---- if dhnio.EnableLog and dhnio.LogFile is not None: dhnio.Dprint(2, 'dhnmain.run want to switch log files') if dhnio.Windows() and dhnio.isFrozen(): dhnio.StdOutRedirectingStop() dhnio.CloseLogFile() dhnio.OpenLogFile(settings.MainLogFilename()+'-'+time.strftime('%y%m%d%H%M%S')+'.log') if dhnio.Windows() and dhnio.isFrozen(): dhnio.StdOutRedirectingStart() #---memdebug--- if settings.uconfig('logs.memdebug-enable') == 'True': try: import lib.memdebug as memdebug memdebug_port = int(settings.uconfig('logs.memdebug-port')) memdebug.start(memdebug_port) reactor.addSystemEventTrigger('before', 'shutdown', memdebug.stop) dhnio.Dprint(2, 'dhnmain.run memdebug web server started on port %d' % memdebug_port) except: dhnio.DprintException() #---process ID--- try: pid = os.getpid() pid_file_path = os.path.join(settings.MetaDataDir(), 'processid') dhnio.WriteFile(pid_file_path, str(pid)) dhnio.Dprint(2, 'dhnmain.run wrote process id [%s] in the file %s' % (str(pid), pid_file_path)) except: dhnio.DprintException() # #---reactor.callLater patch--- # if dhnio.Debug(12): # patchReactorCallLater(reactor) # monitorDelayedCalls(reactor) dhnio.Dprint(2,"dhnmain.run UI=[%s]" % UI) if dhnio.Debug(10): dhnio.Dprint(0, '\n' + dhnio.osinfofull()) dhnio.Dprint(4, 'dhnmain.run import automats') #---START!--- import lib.automat as automat automat.LifeBegins(dhnio.LifeBeginsTime) automat.OpenLogFile(settings.AutomatsLog()) import initializer import shutdowner dhnio.Dprint(4, 'dhnmain.run send event "run" to initializer()') #reactor.callLater(0, initializer.A, 'run', UI) initializer.A('run', UI) #reactor.addSystemEventTrigger('before', 'shutdown', lambda : initializer.A('reactor-stopped')) dhnio.Dprint(2, 'dhnmain.run calling reactor.run()') reactor.run() dhnio.Dprint(2, 'dhnmain.run reactor stopped') # this will call initializer() without reactor.callLater(0, ... ) # we do not have any timers initializer() so do not worry #initializer.A('reactor-stopped', use_reactor = False) shutdowner.A('reactor-stopped') dhnio.Dprint(2, 'dhnmain.run finished, EXIT') automat.objects().clear() automat.CloseLogFile() ## import threading ## dhnio.Dprint(0, 'threads:') ## for t in threading.enumerate(): ## dhnio.Dprint(0, ' '+str(t)) dhnio.CloseLogFile() if dhnio.Windows() and dhnio.isFrozen(): dhnio.StdOutRedirectingStop() return 0