Compare commits

..

No commits in common. "fab12ad9bf9f997797034950f289fe41a79dcf5a" and "2ac2b100ae9bdac107bf2c17e12e8406464c8d72" have entirely different histories.

6 changed files with 42 additions and 35 deletions

View file

@ -101,6 +101,20 @@ RENDERER_MICRON = 0x01
RENDERER_MARKDOWN = 0x02
RENDERER_BBCODE = 0x03
############################################################
# To be finalized in 1.0.0. A workdoc with open interaction
# through rngit is available for comments and nuancing on:
#
# a8d24177d946de4f1f0a0fe1af9a1338:/page/work.mu`g=reticulum|r=lxmf
#
# Clients that have implemented different reply, reaction
# or comment mechanisms can choose to transitionally parse
# their own specific formats, but are recommended to attempt
# parsing the structure and format defined herein first,
# and fall back to their client-specific structure second.
# Reaction dict indicies are integers to preserve bandwidth.
#
# Clients choose how to handle reaction content, if at all.
# While reactions are typically a single unicode emoji or
# similar, the exact implementation and sanitization is
@ -109,6 +123,8 @@ RENDERER_BBCODE = 0x03
REACTION_TO = 0x00 # Bytes, full LXMessage.hash
REACTION_CONTENT = 0x01 # Bytes, the reaction content in UTF-8 encoding
# Comment dict indicies are integers to preserve bandwidth.
#
# Clients choose how to handle messages intended as comments
# for other message, if at all. The actual comment content
# is carried as the normal LXM content, meaning clients that
@ -117,6 +133,8 @@ REACTION_CONTENT = 0x01 # Bytes, the reaction content in UTF-8 encoding
# with the following keys:
COMMENT_FOR = 0x00 # Bytes, full LXMessage.hash
# Continuation dict indicies are integers to preserve bandwidth.
#
# Clients choose how to handle messages that continue earlier
# messages, if at all. The actual continuation content is
# carried as the normal LXM content, meaning clients that
@ -124,6 +142,7 @@ COMMENT_FOR = 0x00 # Bytes, full LXMessage.hash
# When using the FIELD_CONTINUATION field, the contents is a
# dict with the following keys:
CONTINUATION_OF = 0x00 # Bytes, full LXMessage.hash
############################################################
# Optional propagation node metadata fields. These
# fields may be highly unstable in allocation and
@ -169,7 +188,8 @@ def display_name_from_app_data(app_data=None):
return None
# Original announce format
else: return app_data.decode("utf-8")
else:
return app_data.decode("utf-8")
def stamp_cost_from_app_data(app_data=None):
if app_data == None or app_data == b"": return None
@ -218,8 +238,8 @@ def pn_stamp_cost_from_app_data(app_data=None):
if pn_announce_data_is_valid(app_data):
data = msgpack.unpackb(app_data)
return data[5][0]
else: return None
else:
return None
def pn_announce_data_is_valid(data):
try:

View file

@ -404,7 +404,7 @@ class LXMPeer:
if response == LXMPeer.ERROR_NO_IDENTITY:
if self.link != None:
RNS.log("Remote peer indicated that no identification was received, retrying...", RNS.LOG_VERBOSE)
self.link.identify(self.router.identity)
self.link.identify()
self.state = LXMPeer.LINK_READY
self.sync()
return

View file

@ -8,7 +8,6 @@ import multiprocessing
import LXMF.LXStamper as LXStamper
from .LXMF import APP_NAME, compression_support_from_app_data
from threading import Lock
class LXMessage:
@ -185,7 +184,6 @@ class LXMessage:
self.__delivery_destination = None
self.__delivery_callback = None
self.__pn_encrypted_data = None
self.__persist_lock = Lock()
self.failed_callback = None
self.deferred_stamp_generating = False
@ -674,26 +672,25 @@ class LXMessage:
def write_to_directory(self, directory_path):
file_name = RNS.hexrep(self.hash, delimit=False)
file_path = directory_path+"/"+file_name
tmp_path = file_path+".tmp."+str(os.getpid() or time.time())+"."+RNS.hexrep(os.urandom(8), delimit=False)
tmp_path = file_path+".tmp."+str(os.getpid() or time.time())
with self.__persist_lock:
try:
with open(tmp_path, "wb") as file:
file.write(self.packed_container())
file.flush()
try: os.fsync(file.fileno())
except OSError as e: RNS.log(f"Error while waiting for persist fsync for {self}: {e}", RNS.LOG_WARNING)
os.replace(tmp_path, file_path)
return file_path
except Exception as e:
try:
with open(tmp_path, "wb") as file:
file.write(self.packed_container())
file.flush()
try: os.fsync(file.fileno())
except OSError as e: RNS.log(f"Error while waiting for persist fsync for {self}: {e}", RNS.LOG_WARNING)
if os.path.exists(tmp_path): os.unlink(tmp_path)
except Exception as e: RNS.log(f"Error while cleaning temporary file {tmp_path} for {self}: {e}", RNS.LOG_ERROR)
os.replace(tmp_path, file_path)
return file_path
except Exception as e:
try:
if os.path.exists(tmp_path): os.unlink(tmp_path)
except Exception as e: RNS.log(f"Error while cleaning temporary file {tmp_path} for {self}: {e}", RNS.LOG_ERROR)
RNS.log(f"Error while writing LXMF message to file \"{file_path}\". The contained exception was: {e}", RNS.LOG_ERROR)
return None
RNS.log(f"Error while writing LXMF message to file \"{file_path}\". The contained exception was: {e}", RNS.LOG_ERROR)
return None
def as_uri(self, finalise=True):
if not self.packed:

View file

@ -1 +1 @@
__version__ = "1.0.1"
__version__ = "0.9.9"

View file

@ -26,10 +26,5 @@ build_spkg: remove_symlinks build_sdist create_symlinks
release: remove_symlinks build_wheel build_spkg create_symlinks
upload:
@echo Ready to publish release over Reticulum
@read VOID
rngit release rns://7649a50d84610232d1416b41d2896aff/reticulum/lxmf create $$(python setup.py --getversion):dist --name lxmf
upload-pip:
@echo Uploading to PyPi...
twine upload dist/*.whl dist/*.tar.gz

View file

@ -1,4 +1,3 @@
import sys
import setuptools
with open("README.md", "r") as fh:
@ -6,10 +5,6 @@ with open("README.md", "r") as fh:
exec(open("LXMF/_version.py", "r").read())
if "--getversion" in sys.argv:
print(__version__, end="")
exit(0)
setuptools.setup(
name="lxmf",
version=__version__,
@ -31,6 +26,6 @@ setuptools.setup(
'lxmd=LXMF.Utilities.lxmd:main',
]
},
install_requires=["rns>=1.3.5"],
install_requires=["rns>=1.3.0"],
python_requires=">=3.7",
)