kopia lustrzana https://github.com/markqvist/reticulum
				
				
				
			
		
			
				
	
	
		
			111 wiersze
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			111 wiersze
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
| import os
 | |
| import sys
 | |
| import glob
 | |
| import time
 | |
| import random
 | |
| import threading
 | |
| 
 | |
| from ._version import __version__
 | |
| 
 | |
| from .Reticulum import Reticulum
 | |
| from .Identity import Identity
 | |
| from .Link import Link
 | |
| from .Transport import Transport
 | |
| from .Destination import Destination
 | |
| from .Packet import Packet
 | |
| from .Packet import PacketReceipt
 | |
| from .Resource import Resource
 | |
| 
 | |
| modules = glob.glob(os.path.dirname(__file__)+"/*.py")
 | |
| __all__ = [ os.path.basename(f)[:-3] for f in modules if not f.endswith('__init__.py')]
 | |
| 
 | |
| LOG_CRITICAL = 0
 | |
| LOG_ERROR    = 1
 | |
| LOG_WARNING  = 2
 | |
| LOG_NOTICE   = 3
 | |
| LOG_INFO     = 4
 | |
| LOG_VERBOSE  = 5
 | |
| LOG_DEBUG    = 6
 | |
| LOG_EXTREME  = 7
 | |
| 
 | |
| LOG_STDOUT   = 0x91
 | |
| LOG_FILE     = 0x92
 | |
| 
 | |
| loglevel     = LOG_NOTICE
 | |
| logfile      = None
 | |
| logdest      = LOG_STDOUT
 | |
| logtimefmt   = "%Y-%m-%d %H:%M:%S"
 | |
| 
 | |
| random.seed(os.urandom(10))
 | |
| 
 | |
| _always_override_destination = False
 | |
| 
 | |
| logging_lock = threading.Lock()
 | |
| 
 | |
| def loglevelname(level):
 | |
|     if (level == LOG_CRITICAL):
 | |
|         return "Critical"
 | |
|     if (level == LOG_ERROR):
 | |
|         return "Error"
 | |
|     if (level == LOG_WARNING):
 | |
|         return "Warning"
 | |
|     if (level == LOG_NOTICE):
 | |
|         return "Notice"
 | |
|     if (level == LOG_INFO):
 | |
|         return "Info"
 | |
|     if (level == LOG_VERBOSE):
 | |
|         return "Verbose"
 | |
|     if (level == LOG_DEBUG):
 | |
|         return "Debug"
 | |
|     if (level == LOG_EXTREME):
 | |
|         return "Extra"
 | |
|     
 | |
|     return "Unknown"
 | |
| 
 | |
| def version():
 | |
|     return __version__
 | |
| 
 | |
| def log(msg, level=3, _override_destination = False):
 | |
|     global _always_override_destination
 | |
|     
 | |
|     if loglevel >= level:
 | |
|         timestamp = time.time()
 | |
|         logstring = "["+time.strftime(logtimefmt)+"] ["+loglevelname(level)+"] "+msg
 | |
|         logging_lock.acquire()
 | |
| 
 | |
|         if (logdest == LOG_STDOUT or _always_override_destination or _override_destination):
 | |
|             print(logstring)
 | |
|             logging_lock.release()
 | |
| 
 | |
|         elif (logdest == LOG_FILE and logfile != None):
 | |
|             try:
 | |
|                 file = open(logfile, "a")
 | |
|                 file.write(logstring+"\n")
 | |
|                 file.close()
 | |
|                 logging_lock.release()
 | |
|             except Exception as e:
 | |
|                 logging_lock.release()
 | |
|                 _always_override_destination = True
 | |
|                 log("Exception occurred while writing log message to log file: "+str(e), LOG_CRITICAL)
 | |
|                 log("Dumping future log events to console!", LOG_CRITICAL)
 | |
|                 log(msg, level)
 | |
|                 
 | |
| 
 | |
| def rand():
 | |
|     result = random.random()
 | |
|     return result
 | |
| 
 | |
| def hexrep(data, delimit=True):
 | |
|     delimiter = ":"
 | |
|     if not delimit:
 | |
|         delimiter = ""
 | |
|     hexrep = delimiter.join("{:02x}".format(c) for c in data)
 | |
|     return hexrep
 | |
| 
 | |
| def prettyhexrep(data):
 | |
|     delimiter = ""
 | |
|     hexrep = "<"+delimiter.join("{:02x}".format(c) for c in data)+">"
 | |
|     return hexrep
 | |
| 
 | |
| def panic():
 | |
|     os._exit(255) |