2024-07-28 11:21:15 +00:00
![PierMesh logo ](https://git.utopic.work/PierMesh/piermesh/raw/branch/main/piermeshicon.png )
<!-- PierMesh documentation master file, created by
sphinx-quickstart on Fri Jul 26 23:30:55 2024. -->
2024-08-01 22:03:59 +00:00
< a id = "piermesh-documentation" > < / a >
2024-07-28 11:21:15 +00:00
# PierMesh documentation
# Contents:
2024-08-01 01:00:46 +00:00
* [run: PierMesh service runner ](/PierMesh/piermesh/src/branch/main/docs/run.md )
2024-07-28 11:21:15 +00:00
* [`Node` ](/PierMesh/piermesh/src/branch/main/docs/run.md#run.Node )
2024-07-29 03:47:27 +00:00
* [`Node.actions` ](/PierMesh/piermesh/src/branch/main/docs/run.md#run.Node.actions )
* [`Node.todo` ](/PierMesh/piermesh/src/branch/main/docs/run.md#run.Node.todo )
* [`Node.network` ](/PierMesh/piermesh/src/branch/main/docs/run.md#run.Node.network )
* [`Node.catch` ](/PierMesh/piermesh/src/branch/main/docs/run.md#run.Node.catch )
* [`Node.cache` ](/PierMesh/piermesh/src/branch/main/docs/run.md#run.Node.cache )
* [`Node.nodeInfo` ](/PierMesh/piermesh/src/branch/main/docs/run.md#run.Node.nodeInfo )
* [`Node.onodeID` ](/PierMesh/piermesh/src/branch/main/docs/run.md#run.Node.onodeID )
2024-08-01 21:09:50 +00:00
* [`Node.oTransceiver` ](/PierMesh/piermesh/src/branch/main/docs/run.md#run.Node.oTransceiver )
2024-07-29 03:47:27 +00:00
* [`Node.proc` ](/PierMesh/piermesh/src/branch/main/docs/run.md#run.Node.proc )
* [`Node.mTasks` ](/PierMesh/piermesh/src/branch/main/docs/run.md#run.Node.mTasks )
2024-11-26 17:43:02 +00:00
* [`Node.action_addPSK()` ](/PierMesh/piermesh/src/branch/main/docs/run.md#run.Node.action_addPSK )
* [`Node.action_hop()` ](/PierMesh/piermesh/src/branch/main/docs/run.md#run.Node.action_hop )
* [`Node.action_initCryptography()` ](/PierMesh/piermesh/src/branch/main/docs/run.md#run.Node.action_initCryptography )
2024-07-28 11:21:15 +00:00
* [`Node.action_map()` ](/PierMesh/piermesh/src/branch/main/docs/run.md#run.Node.action_map )
2024-11-26 17:43:02 +00:00
* [`Node.action_routeCatch()` ](/PierMesh/piermesh/src/branch/main/docs/run.md#run.Node.action_routeCatch )
* [`Node.action_routeHop()` ](/PierMesh/piermesh/src/branch/main/docs/run.md#run.Node.action_routeHop )
2024-07-28 11:21:15 +00:00
* [`Node.action_sendCatch()` ](/PierMesh/piermesh/src/branch/main/docs/run.md#run.Node.action_sendCatch )
* [`Node.action_sendToPeer()` ](/PierMesh/piermesh/src/branch/main/docs/run.md#run.Node.action_sendToPeer )
2024-11-26 17:43:02 +00:00
* [`Node.action_syncIndex()` ](/PierMesh/piermesh/src/branch/main/docs/run.md#run.Node.action_syncIndex )
* [`Node.fsInit()` ](/PierMesh/piermesh/src/branch/main/docs/run.md#run.Node.fsInit )
* [`Node.main()` ](/PierMesh/piermesh/src/branch/main/docs/run.md#run.Node.main )
* [`Node.monitor()` ](/PierMesh/piermesh/src/branch/main/docs/run.md#run.Node.monitor )
2024-07-29 03:47:27 +00:00
* [`Node.spongeListen()` ](/PierMesh/piermesh/src/branch/main/docs/run.md#run.Node.spongeListen )
2024-11-26 17:43:02 +00:00
* [tlog ](/PierMesh/piermesh/src/branch/main/docs/tlog.md )
* [`VHandler` ](/PierMesh/piermesh/src/branch/main/docs/tlog.md#tlog.VHandler )
* [`VHandler.tolog` ](/PierMesh/piermesh/src/branch/main/docs/tlog.md#tlog.VHandler.tolog )
* [`VHandler.emit()` ](/PierMesh/piermesh/src/branch/main/docs/tlog.md#tlog.VHandler.emit )
* [`VHandler.tolog` ](/PierMesh/piermesh/src/branch/main/docs/tlog.md#id0 )
* [`logUI()` ](/PierMesh/piermesh/src/branch/main/docs/tlog.md#tlog.logUI )
* [`runLogUI()` ](/PierMesh/piermesh/src/branch/main/docs/tlog.md#tlog.runLogUI )
2024-08-02 04:27:56 +00:00
* [Network: Network map representation ](/PierMesh/piermesh/src/branch/main/docs/Siph/map.md )
2024-07-28 23:25:20 +00:00
* [`Network` ](/PierMesh/piermesh/src/branch/main/docs/Siph/map.md#Siph.map.Network )
* [`Network.omap` ](/PierMesh/piermesh/src/branch/main/docs/Siph/map.md#Siph.map.Network.omap )
* [`Network.imap` ](/PierMesh/piermesh/src/branch/main/docs/Siph/map.md#Siph.map.Network.imap )
* [`Network.emaps` ](/PierMesh/piermesh/src/branch/main/docs/Siph/map.md#Siph.map.Network.emaps )
* [`Network.lookup` ](/PierMesh/piermesh/src/branch/main/docs/Siph/map.md#Siph.map.Network.lookup )
* [`Network.addLookup()` ](/PierMesh/piermesh/src/branch/main/docs/Siph/map.md#Siph.map.Network.addLookup )
* [`Network.addie()` ](/PierMesh/piermesh/src/branch/main/docs/Siph/map.md#Siph.map.Network.addie )
* [`Network.addin()` ](/PierMesh/piermesh/src/branch/main/docs/Siph/map.md#Siph.map.Network.addin )
* [`Network.addoe()` ](/PierMesh/piermesh/src/branch/main/docs/Siph/map.md#Siph.map.Network.addoe )
* [`Network.addon()` ](/PierMesh/piermesh/src/branch/main/docs/Siph/map.md#Siph.map.Network.addon )
* [`Network.doLookup()` ](/PierMesh/piermesh/src/branch/main/docs/Siph/map.md#Siph.map.Network.doLookup )
* [`Network.export()` ](/PierMesh/piermesh/src/branch/main/docs/Siph/map.md#Siph.map.Network.export )
* [`Network.path` ](/PierMesh/piermesh/src/branch/main/docs/Siph/map.md#Siph.map.Network.path )
* [`Network.getRoute()` ](/PierMesh/piermesh/src/branch/main/docs/Siph/map.md#Siph.map.Network.getRoute )
* [`Network.mimport()` ](/PierMesh/piermesh/src/branch/main/docs/Siph/map.md#Siph.map.Network.mimport )
* [`Network.render()` ](/PierMesh/piermesh/src/branch/main/docs/Siph/map.md#Siph.map.Network.render )
2024-11-26 17:43:02 +00:00
* [`Network.syncaddLookup()` ](/PierMesh/piermesh/src/branch/main/docs/Siph/map.md#Siph.map.Network.syncaddLookup )
2024-08-01 01:00:46 +00:00
* [hopper: Small internet interop utilities ](/PierMesh/piermesh/src/branch/main/docs/Components/hopper.md )
2024-11-26 17:43:02 +00:00
* [`downloadFile()` ](/PierMesh/piermesh/src/branch/main/docs/Components/hopper.md#Components.hopper.downloadFile )
2024-07-28 11:21:15 +00:00
* [`get()` ](/PierMesh/piermesh/src/branch/main/docs/Components/hopper.md#Components.hopper.get )
* [`post()` ](/PierMesh/piermesh/src/branch/main/docs/Components/hopper.md#Components.hopper.post )
2024-08-01 01:00:46 +00:00
* [Daisy based cache ](/PierMesh/piermesh/src/branch/main/docs/Daisy/Cache.md )
* [`Cache` ](/PierMesh/piermesh/src/branch/main/docs/Daisy/Cache.md#Daisy.Cache.Cache )
* [`Cache.create()` ](/PierMesh/piermesh/src/branch/main/docs/Daisy/Cache.md#Daisy.Cache.Cache.create )
* [`Cache.get()` ](/PierMesh/piermesh/src/branch/main/docs/Daisy/Cache.md#Daisy.Cache.Cache.get )
* [`Cache.refresh()` ](/PierMesh/piermesh/src/branch/main/docs/Daisy/Cache.md#Daisy.Cache.Cache.refresh )
* [`Cache.search()` ](/PierMesh/piermesh/src/branch/main/docs/Daisy/Cache.md#Daisy.Cache.Cache.search )
2024-08-02 04:27:56 +00:00
* [Daisy Catch cache ](/PierMesh/piermesh/src/branch/main/docs/Daisy/Catch.md )
* [`Catch` ](/PierMesh/piermesh/src/branch/main/docs/Daisy/Catch.md#Daisy.Catch.Catch )
* [`Catch.get()` ](/PierMesh/piermesh/src/branch/main/docs/Daisy/Catch.md#Daisy.Catch.Catch.get )
* [`Catch.sget()` ](/PierMesh/piermesh/src/branch/main/docs/Daisy/Catch.md#Daisy.Catch.Catch.sget )
2024-11-26 17:43:02 +00:00
* [Credential ](/PierMesh/piermesh/src/branch/main/docs/Daisy/Credential.md )
* [`Credential` ](/PierMesh/piermesh/src/branch/main/docs/Daisy/Credential.md#Daisy.Credential.Credential )
* [CryptographyUtil ](/PierMesh/piermesh/src/branch/main/docs/Daisy/CryptographyUtil.md )
* [`SteelPetal` ](/PierMesh/piermesh/src/branch/main/docs/Daisy/CryptographyUtil.md#Daisy.CryptographyUtil.SteelPetal )
* [`SteelPetal.decrypt()` ](/PierMesh/piermesh/src/branch/main/docs/Daisy/CryptographyUtil.md#Daisy.CryptographyUtil.SteelPetal.decrypt )
* [`SteelPetal.encrypt()` ](/PierMesh/piermesh/src/branch/main/docs/Daisy/CryptographyUtil.md#Daisy.CryptographyUtil.SteelPetal.encrypt )
* [`SteelPetal.pad()` ](/PierMesh/piermesh/src/branch/main/docs/Daisy/CryptographyUtil.md#Daisy.CryptographyUtil.SteelPetal.pad )
2024-08-02 04:27:56 +00:00
* [Daisy ](/PierMesh/piermesh/src/branch/main/docs/Daisy/Daisy.md )
* [`Daisy` ](/PierMesh/piermesh/src/branch/main/docs/Daisy/Daisy.md#Daisy.Daisy.Daisy )
* [`Daisy.filepath` ](/PierMesh/piermesh/src/branch/main/docs/Daisy/Daisy.md#Daisy.Daisy.Daisy.filepath )
* [`Daisy.msg` ](/PierMesh/piermesh/src/branch/main/docs/Daisy/Daisy.md#Daisy.Daisy.Daisy.msg )
* [`Daisy.get()` ](/PierMesh/piermesh/src/branch/main/docs/Daisy/Daisy.md#Daisy.Daisy.Daisy.get )
2024-11-26 17:43:02 +00:00
* [`Daisy.json_to_msg()` ](/PierMesh/piermesh/src/branch/main/docs/Daisy/Daisy.md#Daisy.Daisy.Daisy.json_to_msg )
2024-08-02 04:27:56 +00:00
* [`Daisy.read()` ](/PierMesh/piermesh/src/branch/main/docs/Daisy/Daisy.md#Daisy.Daisy.Daisy.read )
* [`Daisy.sublist()` ](/PierMesh/piermesh/src/branch/main/docs/Daisy/Daisy.md#Daisy.Daisy.Daisy.sublist )
* [`Daisy.write()` ](/PierMesh/piermesh/src/branch/main/docs/Daisy/Daisy.md#Daisy.Daisy.Daisy.write )
2024-11-26 17:43:02 +00:00
* [Index ](/PierMesh/piermesh/src/branch/main/docs/Daisy/Index.md )
* [`Index` ](/PierMesh/piermesh/src/branch/main/docs/Daisy/Index.md#Daisy.Index.Index )
* [`Index.addEntry()` ](/PierMesh/piermesh/src/branch/main/docs/Daisy/Index.md#Daisy.Index.Index.addEntry )
* [`Index.search()` ](/PierMesh/piermesh/src/branch/main/docs/Daisy/Index.md#Daisy.Index.Index.search )
* [Ref ](/PierMesh/piermesh/src/branch/main/docs/Daisy/Ref.md )
* [`Ref` ](/PierMesh/piermesh/src/branch/main/docs/Daisy/Ref.md#Daisy.Ref.Ref )
2024-08-02 04:27:56 +00:00
* [Store: Daisy key value store ](/PierMesh/piermesh/src/branch/main/docs/Daisy/Store.md )
* [`Store` ](/PierMesh/piermesh/src/branch/main/docs/Daisy/Store.md#Daisy.Store.Store )
2024-11-26 17:43:02 +00:00
* [`Store.epehemeral` ](/PierMesh/piermesh/src/branch/main/docs/Daisy/Store.md#Daisy.Store.Store.epehemeral )
* [`Store.createEmpty()` ](/PierMesh/piermesh/src/branch/main/docs/Daisy/Store.md#Daisy.Store.Store.createEmpty )
2024-08-02 04:27:56 +00:00
* [`Store.getRecord()` ](/PierMesh/piermesh/src/branch/main/docs/Daisy/Store.md#Daisy.Store.Store.getRecord )
* [`Store.update()` ](/PierMesh/piermesh/src/branch/main/docs/Daisy/Store.md#Daisy.Store.Store.update )
2024-11-26 17:43:02 +00:00
* [WhaleSong ](/PierMesh/piermesh/src/branch/main/docs/Cryptography/WhaleSong.md )
* [`Transport` ](/PierMesh/piermesh/src/branch/main/docs/Cryptography/WhaleSong.md#Cryptography.WhaleSong.Transport )
* [`Transport.loadedKeys` ](/PierMesh/piermesh/src/branch/main/docs/Cryptography/WhaleSong.md#Cryptography.WhaleSong.Transport.loadedKeys )
* [`Transport.nodeNickname` ](/PierMesh/piermesh/src/branch/main/docs/Cryptography/WhaleSong.md#Cryptography.WhaleSong.Transport.nodeNickname )
* [`Transport.cache` ](/PierMesh/piermesh/src/branch/main/docs/Cryptography/WhaleSong.md#Cryptography.WhaleSong.Transport.cache )
* [`Transport.publicKey` ](/PierMesh/piermesh/src/branch/main/docs/Cryptography/WhaleSong.md#Cryptography.WhaleSong.Transport.publicKey )
* [`Transport.privateKey` ](/PierMesh/piermesh/src/branch/main/docs/Cryptography/WhaleSong.md#Cryptography.WhaleSong.Transport.privateKey )
* [`Transport.daisyCryptography` ](/PierMesh/piermesh/src/branch/main/docs/Cryptography/WhaleSong.md#Cryptography.WhaleSong.Transport.daisyCryptography )
* [`Transport.addPeerEphemeralKey()` ](/PierMesh/piermesh/src/branch/main/docs/Cryptography/WhaleSong.md#Cryptography.WhaleSong.Transport.addPeerEphemeralKey )
* [`Transport.addPublickey()` ](/PierMesh/piermesh/src/branch/main/docs/Cryptography/WhaleSong.md#Cryptography.WhaleSong.Transport.addPublickey )
* [`Transport.decrypt()` ](/PierMesh/piermesh/src/branch/main/docs/Cryptography/WhaleSong.md#Cryptography.WhaleSong.Transport.decrypt )
* [`Transport.encrypt()` ](/PierMesh/piermesh/src/branch/main/docs/Cryptography/WhaleSong.md#Cryptography.WhaleSong.Transport.encrypt )
* [`Transport.genOurEphemeralKey()` ](/PierMesh/piermesh/src/branch/main/docs/Cryptography/WhaleSong.md#Cryptography.WhaleSong.Transport.genOurEphemeralKey )
* [`Transport.genStaticKey()` ](/PierMesh/piermesh/src/branch/main/docs/Cryptography/WhaleSong.md#Cryptography.WhaleSong.Transport.genStaticKey )
* [`Transport.generateSessionKey()` ](/PierMesh/piermesh/src/branch/main/docs/Cryptography/WhaleSong.md#Cryptography.WhaleSong.Transport.generateSessionKey )
* [`Transport.getRecord()` ](/PierMesh/piermesh/src/branch/main/docs/Cryptography/WhaleSong.md#Cryptography.WhaleSong.Transport.getRecord )
* [`Transport.initStore()` ](/PierMesh/piermesh/src/branch/main/docs/Cryptography/WhaleSong.md#Cryptography.WhaleSong.Transport.initStore )
* [`Transport.kdf()` ](/PierMesh/piermesh/src/branch/main/docs/Cryptography/WhaleSong.md#Cryptography.WhaleSong.Transport.kdf )
* [`Transport.sessionSetup()` ](/PierMesh/piermesh/src/branch/main/docs/Cryptography/WhaleSong.md#Cryptography.WhaleSong.Transport.sessionSetup )
2024-08-02 04:27:56 +00:00
* [base: Primary filtering functionality ](/PierMesh/piermesh/src/branch/main/docs/Sponge/base.md )
* [`Filter` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/base.md#Sponge.base.Filter )
* [`Filter.cache` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/base.md#Sponge.base.Filter.cache )
2024-11-26 17:43:02 +00:00
* [`Filter.onodeID` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/base.md#Sponge.base.Filter.onodeID )
* [`Filter.todo` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/base.md#Sponge.base.Filter.todo )
* [`Filter.cryptographyInfo` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/base.md#Sponge.base.Filter.cryptographyInfo )
* [`Filter.messages` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/base.md#Sponge.base.Filter.messages )
* [`Filter.submessages` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/base.md#Sponge.base.Filter.submessages )
* [`Filter.completed` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/base.md#Sponge.base.Filter.completed )
2024-08-02 04:27:56 +00:00
* [`Filter.mCheck()` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/base.md#Sponge.base.Filter.mCheck )
* [`Filter.protoMap()` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/base.md#Sponge.base.Filter.protoMap )
* [`Filter.selfCheck()` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/base.md#Sponge.base.Filter.selfCheck )
* [`Filter.sieve()` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/base.md#Sponge.base.Filter.sieve )
2024-11-26 17:43:02 +00:00
* [Sponge.Protocols.Yellow ](/PierMesh/piermesh/src/branch/main/docs/Sponge/Protocols/Yellow.md )
* [`YCTX` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/Protocols/Yellow.md#Sponge.Protocols.Yellow.YCTX )
* [`Yellow` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/Protocols/Yellow.md#Sponge.Protocols.Yellow.Yellow )
* [`Yellow.yctx` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/Protocols/Yellow.md#Sponge.Protocols.Yellow.Yellow.yctx )
* [`Yellow.message` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/Protocols/Yellow.md#Sponge.Protocols.Yellow.Yellow.message )
* [`Yellow.submessages` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/Protocols/Yellow.md#Sponge.Protocols.Yellow.Yellow.submessages )
* [`Yellow.submessagesIDs` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/Protocols/Yellow.md#Sponge.Protocols.Yellow.Yellow.submessagesIDs )
* [`Yellow.finishedSubmessages` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/Protocols/Yellow.md#Sponge.Protocols.Yellow.Yellow.finishedSubmessages )
* [`Yellow.dataOrder` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/Protocols/Yellow.md#Sponge.Protocols.Yellow.Yellow.dataOrder )
* [`Yellow.data` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/Protocols/Yellow.md#Sponge.Protocols.Yellow.Yellow.data )
* [`Yellow.nonce` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/Protocols/Yellow.md#Sponge.Protocols.Yellow.Yellow.nonce )
* [`Yellow.tag` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/Protocols/Yellow.md#Sponge.Protocols.Yellow.Yellow.tag )
* [`Yellow.gotHead` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/Protocols/Yellow.md#Sponge.Protocols.Yellow.Yellow.gotHead )
* [`Yellow.todo` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/Protocols/Yellow.md#Sponge.Protocols.Yellow.Yellow.todo )
* [`Yellow.checkComplete()` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/Protocols/Yellow.md#Sponge.Protocols.Yellow.Yellow.checkComplete )
* [`Yellow.doAct()` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/Protocols/Yellow.md#Sponge.Protocols.Yellow.Yellow.doAct )
* [`Yellow.dump()` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/Protocols/Yellow.md#Sponge.Protocols.Yellow.Yellow.dump )
* [`Yellow.id()` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/Protocols/Yellow.md#Sponge.Protocols.Yellow.Yellow.id )
* [`Yellow.pActions` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/Protocols/Yellow.md#Sponge.Protocols.Yellow.Yellow.pActions )
* [`Yellow.processPacket()` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/Protocols/Yellow.md#Sponge.Protocols.Yellow.Yellow.processPacket )
* [Sponge.Protocols.bubble ](/PierMesh/piermesh/src/branch/main/docs/Sponge/Protocols/bubble.md )
* [`Bubble` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/Protocols/bubble.md#Sponge.Protocols.bubble.Bubble )
* [`Bubble.pActions` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/Protocols/bubble.md#Sponge.Protocols.bubble.Bubble.pActions )
* [Sponge.Protocols.catch ](/PierMesh/piermesh/src/branch/main/docs/Sponge/Protocols/catch.md )
* [`Catch` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/Protocols/catch.md#Sponge.Protocols.catch.Catch )
* [`Catch.pActions` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/Protocols/catch.md#Sponge.Protocols.catch.Catch.pActions )
* [Sponge.Protocols.cryptography ](/PierMesh/piermesh/src/branch/main/docs/Sponge/Protocols/cryptography.md )
* [`CryptographyFilter` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/Protocols/cryptography.md#Sponge.Protocols.cryptography.CryptographyFilter )
* [`CryptographyFilter.pActions` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/Protocols/cryptography.md#Sponge.Protocols.cryptography.CryptographyFilter.pActions )
* [Sponge.Protocols.hopper ](/PierMesh/piermesh/src/branch/main/docs/Sponge/Protocols/hopper.md )
* [`Hopper` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/Protocols/hopper.md#Sponge.Protocols.hopper.Hopper )
* [`Hopper.pActions` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/Protocols/hopper.md#Sponge.Protocols.hopper.Hopper.pActions )
* [Sponge.Protocols.map ](/PierMesh/piermesh/src/branch/main/docs/Sponge/Protocols/map.md )
* [`Map` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/Protocols/map.md#Sponge.Protocols.map.Map )
* [`Map.pActions` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/Protocols/map.md#Sponge.Protocols.map.Map.pActions )
* [`Map.process()` ](/PierMesh/piermesh/src/branch/main/docs/Sponge/Protocols/map.md#Sponge.Protocols.map.Map.process )
2024-07-28 11:21:15 +00:00
* [Header packet: Metadata packet ](/PierMesh/piermesh/src/branch/main/docs/Packets/HeaderPacket.md )
* [`Header` ](/PierMesh/piermesh/src/branch/main/docs/Packets/HeaderPacket.md#Packets.HeaderPacket.Header )
2024-08-01 01:00:46 +00:00
* [`Header.sender` ](/PierMesh/piermesh/src/branch/main/docs/Packets/HeaderPacket.md#Packets.HeaderPacket.Header.sender )
* [`Header.senderDisplayName` ](/PierMesh/piermesh/src/branch/main/docs/Packets/HeaderPacket.md#Packets.HeaderPacket.Header.senderDisplayName )
* [`Header.recipient` ](/PierMesh/piermesh/src/branch/main/docs/Packets/HeaderPacket.md#Packets.HeaderPacket.Header.recipient )
* [`Header.recipientNode` ](/PierMesh/piermesh/src/branch/main/docs/Packets/HeaderPacket.md#Packets.HeaderPacket.Header.recipientNode )
* [`Header.subpacket` ](/PierMesh/piermesh/src/branch/main/docs/Packets/HeaderPacket.md#Packets.HeaderPacket.Header.subpacket )
* [`Header.wantFullResponse` ](/PierMesh/piermesh/src/branch/main/docs/Packets/HeaderPacket.md#Packets.HeaderPacket.Header.wantFullResponse )
* [`Header.pAction` ](/PierMesh/piermesh/src/branch/main/docs/Packets/HeaderPacket.md#Packets.HeaderPacket.Header.pAction )
* [`Header.dump()` ](/PierMesh/piermesh/src/branch/main/docs/Packets/HeaderPacket.md#Packets.HeaderPacket.Header.dump )
* [`Header.usePreset()` ](/PierMesh/piermesh/src/branch/main/docs/Packets/HeaderPacket.md#Packets.HeaderPacket.Header.usePreset )
2024-08-02 04:27:56 +00:00
* [Packet: Base packet ](/PierMesh/piermesh/src/branch/main/docs/Packets/Packet.md )
2024-07-28 11:21:15 +00:00
* [`Packet` ](/PierMesh/piermesh/src/branch/main/docs/Packets/Packet.md#Packets.Packet.Packet )
2024-08-01 01:00:46 +00:00
* [`Packet.data` ](/PierMesh/piermesh/src/branch/main/docs/Packets/Packet.md#Packets.Packet.Packet.data )
* [`Packet.packetsID` ](/PierMesh/piermesh/src/branch/main/docs/Packets/Packet.md#Packets.Packet.Packet.packetsID )
* [`Packet.packetNumber` ](/PierMesh/piermesh/src/branch/main/docs/Packets/Packet.md#Packets.Packet.Packet.packetNumber )
* [`Packet.packetCount` ](/PierMesh/piermesh/src/branch/main/docs/Packets/Packet.md#Packets.Packet.Packet.packetCount )
* [`Packet.packetsClass` ](/PierMesh/piermesh/src/branch/main/docs/Packets/Packet.md#Packets.Packet.Packet.packetsClass )
* [`Packet.dump()` ](/PierMesh/piermesh/src/branch/main/docs/Packets/Packet.md#Packets.Packet.Packet.dump )
* [`Packet.parsePayload()` ](/PierMesh/piermesh/src/branch/main/docs/Packets/Packet.md#Packets.Packet.Packet.parsePayload )
2024-08-02 04:27:56 +00:00
* [SinglePacket: Singular packet messages for very low data applications ](/PierMesh/piermesh/src/branch/main/docs/Packets/SinglePacket.md )
* [`SinglePacket` ](/PierMesh/piermesh/src/branch/main/docs/Packets/SinglePacket.md#Packets.SinglePacket.SinglePacket )
* [SubMessage: Additional data for larger messages ](/PierMesh/piermesh/src/branch/main/docs/Packets/SubMessage.md )
* [`SubMessage` ](/PierMesh/piermesh/src/branch/main/docs/Packets/SubMessage.md#Packets.SubMessage.SubMessage )
* [SubPacket: Packets for submessages ](/PierMesh/piermesh/src/branch/main/docs/Packets/SubPacket.md )
2024-11-26 17:43:02 +00:00
* [`SubMessage` ](/PierMesh/piermesh/src/branch/main/docs/Packets/SubPacket.md#Packets.SubMessage.SubMessage )
* [bubble.Bubble ](/PierMesh/piermesh/src/branch/main/docs/Packets/Messages/Protocols/bubble/Bubble.md )
* [`Bubble` ](/PierMesh/piermesh/src/branch/main/docs/Packets/Messages/Protocols/bubble/Bubble.md#Packets.Messages.Protocols.bubble.Bubble.Bubble )
* [catch.IndexSync ](/PierMesh/piermesh/src/branch/main/docs/Packets/Messages/Protocols/catch/IndexSync.md )
* [`IndexSync` ](/PierMesh/piermesh/src/branch/main/docs/Packets/Messages/Protocols/catch/IndexSync.md#Packets.Messages.Protocols.catch.IndexSync.IndexSync )
* [catch.Request ](/PierMesh/piermesh/src/branch/main/docs/Packets/Messages/Protocols/catch/Request.md )
* [`CatchRequest` ](/PierMesh/piermesh/src/branch/main/docs/Packets/Messages/Protocols/catch/Request.md#Packets.Messages.Protocols.catch.Request.CatchRequest )
* [catch.Response ](/PierMesh/piermesh/src/branch/main/docs/Packets/Messages/Protocols/catch/Response.md )
* [`CatchResponse` ](/PierMesh/piermesh/src/branch/main/docs/Packets/Messages/Protocols/catch/Response.md#Packets.Messages.Protocols.catch.Response.CatchResponse )
* [cryptography.Handshake ](/PierMesh/piermesh/src/branch/main/docs/Packets/Messages/Protocols/cryptography/Handshake.md )
* [`Handshake` ](/PierMesh/piermesh/src/branch/main/docs/Packets/Messages/Protocols/cryptography/Handshake.md#Packets.Messages.Protocols.cryptography.Handshake.Handshake )
* [hopper.Request ](/PierMesh/piermesh/src/branch/main/docs/Packets/Messages/Protocols/hopper/Request.md )
* [`HopperRequest` ](/PierMesh/piermesh/src/branch/main/docs/Packets/Messages/Protocols/hopper/Request.md#Packets.Messages.Protocols.hopper.Request.HopperRequest )
* [hopper.Response ](/PierMesh/piermesh/src/branch/main/docs/Packets/Messages/Protocols/hopper/Response.md )
* [`HopperResponse` ](/PierMesh/piermesh/src/branch/main/docs/Packets/Messages/Protocols/hopper/Response.md#Packets.Messages.Protocols.hopper.Response.HopperResponse )
* [map.Announce ](/PierMesh/piermesh/src/branch/main/docs/Packets/Messages/Protocols/map/Announce.md )
* [`AnnounceMessage` ](/PierMesh/piermesh/src/branch/main/docs/Packets/Messages/Protocols/map/Announce.md#Packets.Messages.Protocols.map.Announce.AnnounceMessage )
2024-08-02 04:27:56 +00:00
* [Transceiver: Layer 0 data transceiving ](/PierMesh/piermesh/src/branch/main/docs/Transceiver/Transceiver.md )
2024-08-01 01:00:46 +00:00
* [`Transceiver` ](/PierMesh/piermesh/src/branch/main/docs/Transceiver/Transceiver.md#Transceiver.Transceiver.Transceiver )
* [`Transceiver.cLog` ](/PierMesh/piermesh/src/branch/main/docs/Transceiver/Transceiver.md#Transceiver.Transceiver.Transceiver.cLog )
* [`Transceiver.cryptographyInfo` ](/PierMesh/piermesh/src/branch/main/docs/Transceiver/Transceiver.md#Transceiver.Transceiver.Transceiver.cryptographyInfo )
* [`Transceiver.filter` ](/PierMesh/piermesh/src/branch/main/docs/Transceiver/Transceiver.md#Transceiver.Transceiver.Transceiver.filter )
* [`Transceiver.tcache` ](/PierMesh/piermesh/src/branch/main/docs/Transceiver/Transceiver.md#Transceiver.Transceiver.Transceiver.tcache )
* [`Transceiver.tcatch` ](/PierMesh/piermesh/src/branch/main/docs/Transceiver/Transceiver.md#Transceiver.Transceiver.Transceiver.tcatch )
* [`Transceiver.notConnected` ](/PierMesh/piermesh/src/branch/main/docs/Transceiver/Transceiver.md#Transceiver.Transceiver.Transceiver.notConnected )
* [`Transceiver.acks` ](/PierMesh/piermesh/src/branch/main/docs/Transceiver/Transceiver.md#Transceiver.Transceiver.Transceiver.acks )
* [`Transceiver.onodeID` ](/PierMesh/piermesh/src/branch/main/docs/Transceiver/Transceiver.md#Transceiver.Transceiver.Transceiver.onodeID )
* [`Transceiver.messages` ](/PierMesh/piermesh/src/branch/main/docs/Transceiver/Transceiver.md#Transceiver.Transceiver.Transceiver.messages )
* [`Transceiver.addPackets()` ](/PierMesh/piermesh/src/branch/main/docs/Transceiver/Transceiver.md#Transceiver.Transceiver.Transceiver.addPackets )
* [`Transceiver.announce()` ](/PierMesh/piermesh/src/branch/main/docs/Transceiver/Transceiver.md#Transceiver.Transceiver.Transceiver.announce )
* [`Transceiver.awaitFullResponse()` ](/PierMesh/piermesh/src/branch/main/docs/Transceiver/Transceiver.md#Transceiver.Transceiver.Transceiver.awaitFullResponse )
* [`Transceiver.awaitResponse()` ](/PierMesh/piermesh/src/branch/main/docs/Transceiver/Transceiver.md#Transceiver.Transceiver.Transceiver.awaitResponse )
* [`Transceiver.initNodeDH()` ](/PierMesh/piermesh/src/branch/main/docs/Transceiver/Transceiver.md#Transceiver.Transceiver.Transceiver.initNodeDH )
* [`Transceiver.onConnection()` ](/PierMesh/piermesh/src/branch/main/docs/Transceiver/Transceiver.md#Transceiver.Transceiver.Transceiver.onConnection )
* [`Transceiver.onReceive()` ](/PierMesh/piermesh/src/branch/main/docs/Transceiver/Transceiver.md#Transceiver.Transceiver.Transceiver.onReceive )
* [`Transceiver.progressCheck()` ](/PierMesh/piermesh/src/branch/main/docs/Transceiver/Transceiver.md#Transceiver.Transceiver.Transceiver.progressCheck )
* [`Transceiver.responseCheck()` ](/PierMesh/piermesh/src/branch/main/docs/Transceiver/Transceiver.md#Transceiver.Transceiver.Transceiver.responseCheck )
* [`Transceiver.send()` ](/PierMesh/piermesh/src/branch/main/docs/Transceiver/Transceiver.md#Transceiver.Transceiver.Transceiver.send )
* [`Transceiver.sendAnnounce()` ](/PierMesh/piermesh/src/branch/main/docs/Transceiver/Transceiver.md#Transceiver.Transceiver.Transceiver.sendAnnounce )
2024-11-26 17:43:02 +00:00
* [`Transceiver.sendMessage()` ](/PierMesh/piermesh/src/branch/main/docs/Transceiver/Transceiver.md#Transceiver.Transceiver.Transceiver.sendMessage )
2024-08-01 01:00:46 +00:00
* [serve: Web UI server ](/PierMesh/piermesh/src/branch/main/docs/Splash/serve.md )
* [`Server` ](/PierMesh/piermesh/src/branch/main/docs/Splash/serve.md#Splash.serve.Server )
2024-11-26 17:43:02 +00:00
* [`Server.transceiver` ](/PierMesh/piermesh/src/branch/main/docs/Splash/serve.md#Splash.serve.Server.transceiver )
2024-08-01 01:00:46 +00:00
* [`Server.network` ](/PierMesh/piermesh/src/branch/main/docs/Splash/serve.md#Splash.serve.Server.network )
* [`Server.nodeID` ](/PierMesh/piermesh/src/branch/main/docs/Splash/serve.md#Splash.serve.Server.nodeID )
* [`Server.peerIDs` ](/PierMesh/piermesh/src/branch/main/docs/Splash/serve.md#Splash.serve.Server.peerIDs )
* [`Server.app` ](/PierMesh/piermesh/src/branch/main/docs/Splash/serve.md#Splash.serve.Server.app )
* [`Server.catch` ](/PierMesh/piermesh/src/branch/main/docs/Splash/serve.md#Splash.serve.Server.catch )
2024-11-26 17:43:02 +00:00
* [`Server.getPSKs()` ](/PierMesh/piermesh/src/branch/main/docs/Splash/serve.md#Splash.serve.Server.getPSKs )
2024-08-01 01:00:46 +00:00
* [`Server.sendToPeer()` ](/PierMesh/piermesh/src/branch/main/docs/Splash/serve.md#Splash.serve.Server.sendToPeer )
2024-11-26 17:43:02 +00:00
* [Context ](/PierMesh/piermesh/src/branch/main/docs/Config/Context.md )
* [`Context` ](/PierMesh/piermesh/src/branch/main/docs/Config/Context.md#Config.Context.Context )
* [`Context.ctx` ](/PierMesh/piermesh/src/branch/main/docs/Config/Context.md#Config.Context.Context.ctx )
* [Services.Action ](/PierMesh/piermesh/src/branch/main/docs/Services/Action.md )
* [`Action` ](/PierMesh/piermesh/src/branch/main/docs/Services/Action.md#Services.Action.Action )
* [`Action.action` ](/PierMesh/piermesh/src/branch/main/docs/Services/Action.md#Services.Action.Action.action )
* [`Action.data` ](/PierMesh/piermesh/src/branch/main/docs/Services/Action.md#Services.Action.Action.data )
* [`Action.sender` ](/PierMesh/piermesh/src/branch/main/docs/Services/Action.md#Services.Action.Action.sender )
* [`Action.senderID` ](/PierMesh/piermesh/src/branch/main/docs/Services/Action.md#Services.Action.Action.senderID )
* [`Action.sourceNode` ](/PierMesh/piermesh/src/branch/main/docs/Services/Action.md#Services.Action.Action.sourceNode )
* [`Action.recipient` ](/PierMesh/piermesh/src/branch/main/docs/Services/Action.md#Services.Action.Action.recipient )
* [`Action.recipientNode` ](/PierMesh/piermesh/src/branch/main/docs/Services/Action.md#Services.Action.Action.recipientNode )
* [`Action.getAction()` ](/PierMesh/piermesh/src/branch/main/docs/Services/Action.md#Services.Action.Action.getAction )
* [`Action.getData()` ](/PierMesh/piermesh/src/branch/main/docs/Services/Action.md#Services.Action.Action.getData )
$
2024-08-02 12:03:52 +00:00
# System Overview
PierMesh has two main events loops to learn about: the TUI and the service.
## TUI
2024-11-26 18:34:29 +00:00
[🔗 Docs ](https://git.utopic.work/PierMesh/piermesh/src/branch/main/docs/tlog.md )
2024-08-02 12:03:52 +00:00
2024-11-26 18:34:29 +00:00
[🔗 Source ](https://git.utopic.work/PierMesh/piermesh/src/branch/main/src/tlog.py )
2024-08-02 12:03:52 +00:00
2024-11-26 18:34:29 +00:00
The TUI is provided via [curses ](https://docs.python.org/3/howto/curses.html ) library. It's a relatively simple application that gives us a quick overview of system statistics in the way of memory and cpu usage as well as logs you can scroll with the directional keys
2024-08-02 12:03:52 +00:00
## The Service
PierMesh runs a number of loops under the hood. These are primarily initialized in the main loop of run with a special logging loop outside of that.
2024-11-26 18:34:29 +00:00
Note that we make use of [Meshtastic's Python API ](https://github.com/meshtastic/python ).
2024-08-02 12:03:52 +00:00
### run
[🔗 run.py docs ](https://git.utopic.work/PierMesh/piermesh/src/branch/main/docs/run.md )
[🔗 run.py source ](https://git.utopic.work/PierMesh/piermesh/src/branch/main/src/run.py )
#### run.main
In run.main we (in order)
1. Initialize the `Node` class to a global `nodeOb` .
2024-11-26 18:34:29 +00:00
2. Wait for x seconds determined by command line arguments (see the falin script in scripts)
2024-08-02 12:03:52 +00:00
3. Initialize our `Transceiver` class (and the corresponding hardware)
4. Initialize our `Server` class
5. Create an async task running the `Node.spongeListen` method which looks for updates from the filter system
6. Kick the loop on with `await asyncio.sleep(1)` (we do this to kick on all async loops so I will omit this step going forward)
2024-11-26 18:34:29 +00:00
7. Create an async task running the `Transceiver.checkProgress` method which checks for packet reception progress and resends packets if necessary (currently not in use)
2024-08-02 12:03:52 +00:00
8. Create an async task running `Node.monitor` which checks and reports system usage
9. Create an async task running the `Transceiver.announce` method which broadcasts a `Packets.Message` containing network mapping information
10. Last we start the `Microdot` server loop
### ..
2024-11-26 18:34:29 +00:00
Travelling out of the run.main thread to the primary ____main____ code we see the other thread running the TUI loop which has it's own system we just kick on by running .runLogUI
2024-08-02 12:03:52 +00:00
## Packet lifecycle
Prior to this we've been talking relatively high level but if you've read this far you probably want more low level details. Let's talk about packets.
### Packets.Packet
This is a base singular packet. At the very least a packet will contain: a packets ID which determines what set of packets (message) a singular packet belongs to if any, a packetNumber which determines which order the data will be put in, a packetCount which is, well a count of all the packets in a set of packets and in most cases data which is an lzma compressed msgpack encoded chunk of data to be fused together when the full set of packets is received.
### Packets.HeaderPacket
This is the metadata packet for a set of packets (message) which handles the details necessary for routing and action triggering
### Packets.Message
A set of packets instantiated primarily from lzma compressed msgpack encoded bytes
### You keep saying msgpack what is that?
[msgpack ](https://msgpack.org/ ) is what I landed on for bundling metadata and arbitrary bytes after initially using bson as msgpack is leaner, simpler and better adopted for cross platform data interchange
### Transmitting
Once we have our msgpack encoded lzma compressed data we can send it with `Transceiver.addPackets` this method creates a `Message` and sends each `Packet` (dumped to binary data) over LoRa using Meshtastic's Python interface via the `Transceiver.send` method.
### Receiving
On the other end when we receive a `Packet` we pass it directly into `Sponge.base.sieve` which checks: if it's msgpack encoded and if it's a packet sent by the same node. In both cases it skips the packet, otherwise we sieve!
### Sieving
Primarily in this stage we are gathering packets and adding them to an object containing all of the packet info and data we've received for that `Message` .
Once a `Message` is completed we pass it on to the appropriate protocol from `Sponge.Protocols` . These will pass the `Message` wherever it needs to go from there which can be any number of places.
To avoid unnecessary manual documentation labor for future devs I will not list everything that could happen here but here are some examples:
- Updating a Catch
- Sending a message up to a peer on the node
- Sending a Diffie Hellman handshake
# Fin
2024-11-26 18:34:29 +00:00
Well not really, there's more to learn but these are the basics. There's more in the docs above and you can always submit an issue or reach me at info@piermesh.net or on Tumblr at utopicwork.