Updated formatting of examples for better inclusion in documentation.
This commit is contained in:
parent
eb0c40295f
commit
11fe8b64f8
@ -15,7 +15,7 @@ import RNS
|
|||||||
APP_NAME = "example_utilities"
|
APP_NAME = "example_utilities"
|
||||||
|
|
||||||
# We initialise two lists of strings to use as app_data
|
# We initialise two lists of strings to use as app_data
|
||||||
fruits = ["Peach", "Quince", "Date palm", "Tangerine", "Pomelo", "Carambola", "Grape", "Passion fruit", "Prune", "Cranberry", "Strawberry", "Papaya", "Pomegranate", "Avocado", "Mango"]
|
fruits = ["Peach", "Quince", "Date palm", "Tangerine", "Pomelo", "Carambola", "Grape"]
|
||||||
noble_gases = ["Helium", "Neon", "Argon", "Krypton", "Xenon", "Radon", "Oganesson"]
|
noble_gases = ["Helium", "Neon", "Argon", "Krypton", "Xenon", "Radon", "Oganesson"]
|
||||||
|
|
||||||
# This initialisation is executed when the program is started
|
# This initialisation is executed when the program is started
|
||||||
@ -34,8 +34,23 @@ def program_setup(configpath):
|
|||||||
# existence, which will let the network know they are reachable
|
# existence, which will let the network know they are reachable
|
||||||
# and autoomatically create paths to them, from anywhere else
|
# and autoomatically create paths to them, from anywhere else
|
||||||
# in the network.
|
# in the network.
|
||||||
destination_1 = RNS.Destination(identity, RNS.Destination.IN, RNS.Destination.SINGLE, APP_NAME, "announcesample", "fruits")
|
destination_1 = RNS.Destination(
|
||||||
destination_2 = RNS.Destination(identity, RNS.Destination.IN, RNS.Destination.SINGLE, APP_NAME, "announcesample", "noble_gases")
|
identity,
|
||||||
|
RNS.Destination.IN,
|
||||||
|
RNS.Destination.SINGLE,
|
||||||
|
APP_NAME,
|
||||||
|
"announcesample",
|
||||||
|
"fruits"
|
||||||
|
)
|
||||||
|
|
||||||
|
destination_2 = RNS.Destination(
|
||||||
|
identity,
|
||||||
|
RNS.Destination.IN,
|
||||||
|
RNS.Destination.SINGLE,
|
||||||
|
APP_NAME,
|
||||||
|
"announcesample",
|
||||||
|
"noble_gases"
|
||||||
|
)
|
||||||
|
|
||||||
# We configure the destinations to automatically prove all
|
# We configure the destinations to automatically prove all
|
||||||
# packets adressed to it. By doing this, RNS will automatically
|
# packets adressed to it. By doing this, RNS will automatically
|
||||||
@ -49,7 +64,9 @@ def program_setup(configpath):
|
|||||||
# We create an announce handler and configure it to only ask for
|
# We create an announce handler and configure it to only ask for
|
||||||
# announces from "example_utilities.announcesample.fruits".
|
# announces from "example_utilities.announcesample.fruits".
|
||||||
# Try changing the filter and see what happens.
|
# Try changing the filter and see what happens.
|
||||||
announce_handler = ExampleAnnounceHandler(aspect_filter="example_utilities.announcesample.fruits")
|
announce_handler = ExampleAnnounceHandler(
|
||||||
|
aspect_filter="example_utilities.announcesample.fruits"
|
||||||
|
)
|
||||||
|
|
||||||
# We register the announce handler with Reticulum
|
# We register the announce handler with Reticulum
|
||||||
RNS.Transport.register_announce_handler(announce_handler)
|
RNS.Transport.register_announce_handler(announce_handler)
|
||||||
@ -75,14 +92,22 @@ def announceLoop(destination_1, destination_2):
|
|||||||
|
|
||||||
# Send the announce including the app data
|
# Send the announce including the app data
|
||||||
destination_1.announce(app_data=fruit.encode("utf-8"))
|
destination_1.announce(app_data=fruit.encode("utf-8"))
|
||||||
RNS.log("Sent announce from "+RNS.prettyhexrep(destination_1.hash)+" ("+destination_1.name+")")
|
RNS.log(
|
||||||
|
"Sent announce from "+
|
||||||
|
RNS.prettyhexrep(destination_1.hash)+
|
||||||
|
" ("+destination_1.name+")"
|
||||||
|
)
|
||||||
|
|
||||||
# Randomly select a noble gas
|
# Randomly select a noble gas
|
||||||
noble_gas = noble_gases[random.randint(0,len(noble_gases)-1)]
|
noble_gas = noble_gases[random.randint(0,len(noble_gases)-1)]
|
||||||
|
|
||||||
# Send the announce including the app data
|
# Send the announce including the app data
|
||||||
destination_2.announce(app_data=noble_gas.encode("utf-8"))
|
destination_2.announce(app_data=noble_gas.encode("utf-8"))
|
||||||
RNS.log("Sent announce from "+RNS.prettyhexrep(destination_2.hash)+" ("+destination_2.name+")")
|
RNS.log(
|
||||||
|
"Sent announce from "+
|
||||||
|
RNS.prettyhexrep(destination_2.hash)+
|
||||||
|
" ("+destination_2.name+")"
|
||||||
|
)
|
||||||
|
|
||||||
# We will need to define an announce handler class that
|
# We will need to define an announce handler class that
|
||||||
# Reticulum can message when an announce arrives.
|
# Reticulum can message when an announce arrives.
|
||||||
@ -100,8 +125,15 @@ class ExampleAnnounceHandler:
|
|||||||
# configured aspect filter. Filters must be specific,
|
# configured aspect filter. Filters must be specific,
|
||||||
# and cannot use wildcards.
|
# and cannot use wildcards.
|
||||||
def received_announce(self, destination_hash, announced_identity, app_data):
|
def received_announce(self, destination_hash, announced_identity, app_data):
|
||||||
RNS.log("Received an announce from "+RNS.prettyhexrep(destination_hash))
|
RNS.log(
|
||||||
RNS.log("The announce contained the following app data: "+app_data.decode("utf-8"))
|
"Received an announce from "+
|
||||||
|
RNS.prettyhexrep(destination_hash)
|
||||||
|
)
|
||||||
|
|
||||||
|
RNS.log(
|
||||||
|
"The announce contained the following app data: "+
|
||||||
|
app_data.decode("utf-8")
|
||||||
|
)
|
||||||
|
|
||||||
##########################################################
|
##########################################################
|
||||||
#### Program Startup #####################################
|
#### Program Startup #####################################
|
||||||
@ -112,8 +144,18 @@ class ExampleAnnounceHandler:
|
|||||||
# the desired program mode.
|
# the desired program mode.
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
try:
|
try:
|
||||||
parser = argparse.ArgumentParser(description="Reticulum example that demonstrates announces and announce handlers")
|
parser = argparse.ArgumentParser(
|
||||||
parser.add_argument("--config", action="store", default=None, help="path to alternative Reticulum config directory", type=str)
|
description="Reticulum example that demonstrates announces and announce handlers"
|
||||||
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
"--config",
|
||||||
|
action="store",
|
||||||
|
default=None,
|
||||||
|
help="path to alternative Reticulum config directory",
|
||||||
|
type=str
|
||||||
|
)
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
if args.config:
|
if args.config:
|
||||||
|
@ -28,7 +28,14 @@ def program_setup(configpath, channel=None):
|
|||||||
|
|
||||||
# We create a PLAIN destination. This is an uncencrypted endpoint
|
# We create a PLAIN destination. This is an uncencrypted endpoint
|
||||||
# that anyone can listen to and send information to.
|
# that anyone can listen to and send information to.
|
||||||
broadcast_destination = RNS.Destination(None, RNS.Destination.IN, RNS.Destination.PLAIN, APP_NAME, "broadcast", channel)
|
broadcast_destination = RNS.Destination(
|
||||||
|
None,
|
||||||
|
RNS.Destination.IN,
|
||||||
|
RNS.Destination.PLAIN,
|
||||||
|
APP_NAME,
|
||||||
|
"broadcast",
|
||||||
|
channel
|
||||||
|
)
|
||||||
|
|
||||||
# We specify a callback that will get called every time
|
# We specify a callback that will get called every time
|
||||||
# the destination receives data.
|
# the destination receives data.
|
||||||
@ -46,7 +53,11 @@ def packet_callback(data, packet):
|
|||||||
|
|
||||||
def broadcastLoop(destination):
|
def broadcastLoop(destination):
|
||||||
# Let the user know that everything is ready
|
# Let the user know that everything is ready
|
||||||
RNS.log("Broadcast example "+RNS.prettyhexrep(destination.hash)+" running, enter text and hit enter to broadcast (Ctrl-C to quit)")
|
RNS.log(
|
||||||
|
"Broadcast example "+
|
||||||
|
RNS.prettyhexrep(destination.hash)+
|
||||||
|
" running, enter text and hit enter to broadcast (Ctrl-C to quit)"
|
||||||
|
)
|
||||||
|
|
||||||
# We enter a loop that runs until the users exits.
|
# We enter a loop that runs until the users exits.
|
||||||
# If the user hits enter, we will send the information
|
# If the user hits enter, we will send the information
|
||||||
@ -71,9 +82,26 @@ def broadcastLoop(destination):
|
|||||||
# the program.
|
# the program.
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
try:
|
try:
|
||||||
parser = argparse.ArgumentParser(description="Reticulum example that demonstrates sending and receiving unencrypted broadcasts")
|
parser = argparse.ArgumentParser(
|
||||||
parser.add_argument("--config", action="store", default=None, help="path to alternative Reticulum config directory", type=str)
|
description="Reticulum example demonstrating sending and receiving broadcasts"
|
||||||
parser.add_argument("--channel", action="store", default=None, help="broadcast channel name", type=str)
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
"--config",
|
||||||
|
action="store",
|
||||||
|
default=None,
|
||||||
|
help="path to alternative Reticulum config directory",
|
||||||
|
type=str
|
||||||
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
"--channel",
|
||||||
|
action="store",
|
||||||
|
default=None,
|
||||||
|
help="broadcast channel name",
|
||||||
|
type=str
|
||||||
|
)
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
if args.config:
|
if args.config:
|
||||||
|
@ -34,7 +34,14 @@ def server(configpath):
|
|||||||
# messages. This way the client can send a request and be
|
# messages. This way the client can send a request and be
|
||||||
# certain that no-one else than this destination was able
|
# certain that no-one else than this destination was able
|
||||||
# to read it.
|
# to read it.
|
||||||
echo_destination = RNS.Destination(server_identity, RNS.Destination.IN, RNS.Destination.SINGLE, APP_NAME, "echo", "request")
|
echo_destination = RNS.Destination(
|
||||||
|
server_identity,
|
||||||
|
RNS.Destination.IN,
|
||||||
|
RNS.Destination.SINGLE,
|
||||||
|
APP_NAME,
|
||||||
|
"echo",
|
||||||
|
"request"
|
||||||
|
)
|
||||||
|
|
||||||
# We configure the destination to automatically prove all
|
# We configure the destination to automatically prove all
|
||||||
# packets adressed to it. By doing this, RNS will automatically
|
# packets adressed to it. By doing this, RNS will automatically
|
||||||
@ -54,7 +61,11 @@ def server(configpath):
|
|||||||
|
|
||||||
def announceLoop(destination):
|
def announceLoop(destination):
|
||||||
# Let the user know that everything is ready
|
# Let the user know that everything is ready
|
||||||
RNS.log("Echo server "+RNS.prettyhexrep(destination.hash)+" running, hit enter to manually send an announce (Ctrl-C to quit)")
|
RNS.log(
|
||||||
|
"Echo server "+
|
||||||
|
RNS.prettyhexrep(destination.hash)+
|
||||||
|
" running, hit enter to manually send an announce (Ctrl-C to quit)"
|
||||||
|
)
|
||||||
|
|
||||||
# We enter a loop that runs until the users exits.
|
# We enter a loop that runs until the users exits.
|
||||||
# If the user hits enter, we will announce our server
|
# If the user hits enter, we will announce our server
|
||||||
@ -85,7 +96,10 @@ def client(destination_hexhash, configpath, timeout=None):
|
|||||||
# hash that was entered on the command line
|
# hash that was entered on the command line
|
||||||
try:
|
try:
|
||||||
if len(destination_hexhash) != 20:
|
if len(destination_hexhash) != 20:
|
||||||
raise ValueError("Destination length is invalid, must be 20 hexadecimal characters (10 bytes)")
|
raise ValueError(
|
||||||
|
"Destination length is invalid, must be 20 hexadecimal characters (10 bytes)"
|
||||||
|
)
|
||||||
|
|
||||||
destination_hash = bytes.fromhex(destination_hexhash)
|
destination_hash = bytes.fromhex(destination_hexhash)
|
||||||
except:
|
except:
|
||||||
RNS.log("Invalid destination entered. Check your input!\n")
|
RNS.log("Invalid destination entered. Check your input!\n")
|
||||||
@ -100,7 +114,11 @@ def client(destination_hexhash, configpath, timeout=None):
|
|||||||
RNS.loglevel = RNS.LOG_INFO
|
RNS.loglevel = RNS.LOG_INFO
|
||||||
|
|
||||||
# Tell the user that the client is ready!
|
# Tell the user that the client is ready!
|
||||||
RNS.log("Echo client ready, hit enter to send echo request to "+destination_hexhash+" (Ctrl-C to quit)")
|
RNS.log(
|
||||||
|
"Echo client ready, hit enter to send echo request to "+
|
||||||
|
destination_hexhash+
|
||||||
|
" (Ctrl-C to quit)"
|
||||||
|
)
|
||||||
|
|
||||||
# We enter a loop that runs until the user exits.
|
# We enter a loop that runs until the user exits.
|
||||||
# If the user hits enter, we will try to send an
|
# If the user hits enter, we will try to send an
|
||||||
@ -127,7 +145,14 @@ def client(destination_hexhash, configpath, timeout=None):
|
|||||||
# example_utilities.echo.request
|
# example_utilities.echo.request
|
||||||
# This matches the naming we specified in the
|
# This matches the naming we specified in the
|
||||||
# server part of the code.
|
# server part of the code.
|
||||||
request_destination = RNS.Destination(server_identity, RNS.Destination.OUT, RNS.Destination.SINGLE, APP_NAME, "echo", "request")
|
request_destination = RNS.Destination(
|
||||||
|
server_identity,
|
||||||
|
RNS.Destination.OUT,
|
||||||
|
RNS.Destination.SINGLE,
|
||||||
|
APP_NAME,
|
||||||
|
"echo",
|
||||||
|
"request"
|
||||||
|
)
|
||||||
|
|
||||||
# The destination is ready, so let's create a packet.
|
# The destination is ready, so let's create a packet.
|
||||||
# We set the destination to the request_destination
|
# We set the destination to the request_destination
|
||||||
@ -172,7 +197,11 @@ def packet_delivered(receipt):
|
|||||||
rtt = round(rtt*1000, 3)
|
rtt = round(rtt*1000, 3)
|
||||||
rttstring = str(rtt)+" milliseconds"
|
rttstring = str(rtt)+" milliseconds"
|
||||||
|
|
||||||
RNS.log("Valid reply received from "+RNS.prettyhexrep(receipt.destination.hash)+", round-trip time is "+rttstring)
|
RNS.log(
|
||||||
|
"Valid reply received from "+
|
||||||
|
RNS.prettyhexrep(receipt.destination.hash)+
|
||||||
|
", round-trip time is "+rttstring
|
||||||
|
)
|
||||||
|
|
||||||
# This function is called if a packet times out.
|
# This function is called if a packet times out.
|
||||||
def packet_timed_out(receipt):
|
def packet_timed_out(receipt):
|
||||||
@ -190,10 +219,39 @@ def packet_timed_out(receipt):
|
|||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
try:
|
try:
|
||||||
parser = argparse.ArgumentParser(description="Simple echo server and client utility")
|
parser = argparse.ArgumentParser(description="Simple echo server and client utility")
|
||||||
parser.add_argument("-s", "--server", action="store_true", help="wait for incoming packets from clients")
|
|
||||||
parser.add_argument("-t", "--timeout", action="store", metavar="s", default=None, help="set a reply timeout in seconds", type=float)
|
parser.add_argument(
|
||||||
parser.add_argument("--config", action="store", default=None, help="path to alternative Reticulum config directory", type=str)
|
"-s",
|
||||||
parser.add_argument("destination", nargs="?", default=None, help="hexadecimal hash of the server destination", type=str)
|
"--server",
|
||||||
|
action="store_true",
|
||||||
|
help="wait for incoming packets from clients"
|
||||||
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
"-t",
|
||||||
|
"--timeout",
|
||||||
|
action="store",
|
||||||
|
metavar="s",
|
||||||
|
default=None,
|
||||||
|
help="set a reply timeout in seconds",
|
||||||
|
type=float
|
||||||
|
)
|
||||||
|
|
||||||
|
parser.add_argument("--config",
|
||||||
|
action="store",
|
||||||
|
default=None,
|
||||||
|
help="path to alternative Reticulum config directory",
|
||||||
|
type=str
|
||||||
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
"destination",
|
||||||
|
nargs="?",
|
||||||
|
default=None,
|
||||||
|
help="hexadecimal hash of the server destination",
|
||||||
|
type=str
|
||||||
|
)
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
if args.server:
|
if args.server:
|
||||||
|
@ -54,7 +54,14 @@ def server(configpath, path):
|
|||||||
# We create a destination that clients can connect to. We
|
# We create a destination that clients can connect to. We
|
||||||
# want clients to create links to this destination, so we
|
# want clients to create links to this destination, so we
|
||||||
# need to create a "single" destination type.
|
# need to create a "single" destination type.
|
||||||
server_destination = RNS.Destination(server_identity, RNS.Destination.IN, RNS.Destination.SINGLE, APP_NAME, "filetransfer", "server")
|
server_destination = RNS.Destination(
|
||||||
|
server_identity,
|
||||||
|
RNS.Destination.IN,
|
||||||
|
RNS.Destination.SINGLE,
|
||||||
|
APP_NAME,
|
||||||
|
"filetransfer",
|
||||||
|
"server"
|
||||||
|
)
|
||||||
|
|
||||||
# We configure a function that will get called every time
|
# We configure a function that will get called every time
|
||||||
# a new client creates a link to this destination.
|
# a new client creates a link to this destination.
|
||||||
@ -135,7 +142,13 @@ def client_request(message, packet):
|
|||||||
# read it and pack it as a resource
|
# read it and pack it as a resource
|
||||||
RNS.log("Client requested \""+filename+"\"")
|
RNS.log("Client requested \""+filename+"\"")
|
||||||
file = open(os.path.join(serve_path, filename), "rb")
|
file = open(os.path.join(serve_path, filename), "rb")
|
||||||
file_resource = RNS.Resource(file, packet.link, callback=resource_sending_concluded)
|
|
||||||
|
file_resource = RNS.Resource(
|
||||||
|
file,
|
||||||
|
packet.link,
|
||||||
|
callback=resource_sending_concluded
|
||||||
|
)
|
||||||
|
|
||||||
file_resource.filename = filename
|
file_resource.filename = filename
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
# If somethign went wrong, we close
|
# If somethign went wrong, we close
|
||||||
@ -223,7 +236,14 @@ def client(destination_hexhash, configpath):
|
|||||||
|
|
||||||
# When the server identity is known, we set
|
# When the server identity is known, we set
|
||||||
# up a destination
|
# up a destination
|
||||||
server_destination = RNS.Destination(server_identity, RNS.Destination.OUT, RNS.Destination.SINGLE, APP_NAME, "filetransfer", "server")
|
server_destination = RNS.Destination(
|
||||||
|
server_identity,
|
||||||
|
RNS.Destination.OUT,
|
||||||
|
RNS.Destination.SINGLE,
|
||||||
|
APP_NAME,
|
||||||
|
"filetransfer",
|
||||||
|
"server"
|
||||||
|
)
|
||||||
|
|
||||||
# We also want to automatically prove incoming packets
|
# We also want to automatically prove incoming packets
|
||||||
server_destination.set_proof_strategy(RNS.Destination.PROVE_ALL)
|
server_destination.set_proof_strategy(RNS.Destination.PROVE_ALL)
|
||||||
@ -524,10 +544,34 @@ def clear_screen():
|
|||||||
# starts up the desired program mode.
|
# starts up the desired program mode.
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
try:
|
try:
|
||||||
parser = argparse.ArgumentParser(description="Simple file transfer server and client utility")
|
parser = argparse.ArgumentParser(
|
||||||
parser.add_argument("-s", "--serve", action="store", metavar="dir", help="serve a directory of files to clients")
|
description="Simple file transfer server and client utility"
|
||||||
parser.add_argument("--config", action="store", default=None, help="path to alternative Reticulum config directory", type=str)
|
)
|
||||||
parser.add_argument("destination", nargs="?", default=None, help="hexadecimal hash of the server destination", type=str)
|
|
||||||
|
parser.add_argument(
|
||||||
|
"-s",
|
||||||
|
"--serve",
|
||||||
|
action="store",
|
||||||
|
metavar="dir",
|
||||||
|
help="serve a directory of files to clients"
|
||||||
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
"--config",
|
||||||
|
action="store",
|
||||||
|
default=None,
|
||||||
|
help="path to alternative Reticulum config directory",
|
||||||
|
type=str
|
||||||
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
"destination",
|
||||||
|
nargs="?",
|
||||||
|
default=None,
|
||||||
|
help="hexadecimal hash of the server destination",
|
||||||
|
type=str
|
||||||
|
)
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
if args.config:
|
if args.config:
|
||||||
|
@ -34,7 +34,13 @@ def server(configpath):
|
|||||||
# We create a destination that clients can connect to. We
|
# We create a destination that clients can connect to. We
|
||||||
# want clients to create links to this destination, so we
|
# want clients to create links to this destination, so we
|
||||||
# need to create a "single" destination type.
|
# need to create a "single" destination type.
|
||||||
server_destination = RNS.Destination(server_identity, RNS.Destination.IN, RNS.Destination.SINGLE, APP_NAME, "linkexample")
|
server_destination = RNS.Destination(
|
||||||
|
server_identity,
|
||||||
|
RNS.Destination.IN,
|
||||||
|
RNS.Destination.SINGLE,
|
||||||
|
APP_NAME,
|
||||||
|
"linkexample"
|
||||||
|
)
|
||||||
|
|
||||||
# We configure a function that will get called every time
|
# We configure a function that will get called every time
|
||||||
# a new client creates a link to this destination.
|
# a new client creates a link to this destination.
|
||||||
@ -46,7 +52,12 @@ def server(configpath):
|
|||||||
|
|
||||||
def server_loop(destination):
|
def server_loop(destination):
|
||||||
# Let the user know that everything is ready
|
# Let the user know that everything is ready
|
||||||
RNS.log("Link example "+RNS.prettyhexrep(destination.hash)+" running, waiting for a connection.")
|
RNS.log(
|
||||||
|
"Link example "+
|
||||||
|
RNS.prettyhexrep(destination.hash)+
|
||||||
|
" running, waiting for a connection."
|
||||||
|
)
|
||||||
|
|
||||||
RNS.log("Hit enter to manually send an announce (Ctrl-C to quit)")
|
RNS.log("Hit enter to manually send an announce (Ctrl-C to quit)")
|
||||||
|
|
||||||
# We enter a loop that runs until the users exits.
|
# We enter a loop that runs until the users exits.
|
||||||
@ -124,7 +135,13 @@ def client(destination_hexhash, configpath):
|
|||||||
|
|
||||||
# When the server identity is known, we set
|
# When the server identity is known, we set
|
||||||
# up a destination
|
# up a destination
|
||||||
server_destination = RNS.Destination(server_identity, RNS.Destination.OUT, RNS.Destination.SINGLE, APP_NAME, "linkexample")
|
server_destination = RNS.Destination(
|
||||||
|
server_identity,
|
||||||
|
RNS.Destination.OUT,
|
||||||
|
RNS.Destination.SINGLE,
|
||||||
|
APP_NAME,
|
||||||
|
"linkexample"
|
||||||
|
)
|
||||||
|
|
||||||
# And create a link
|
# And create a link
|
||||||
link = RNS.Link(server_destination)
|
link = RNS.Link(server_destination)
|
||||||
@ -214,9 +231,30 @@ def client_packet_received(message, packet):
|
|||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
try:
|
try:
|
||||||
parser = argparse.ArgumentParser(description="Simple link example")
|
parser = argparse.ArgumentParser(description="Simple link example")
|
||||||
parser.add_argument("-s", "--server", action="store_true", help="wait for incoming link requests from clients")
|
|
||||||
parser.add_argument("--config", action="store", default=None, help="path to alternative Reticulum config directory", type=str)
|
parser.add_argument(
|
||||||
parser.add_argument("destination", nargs="?", default=None, help="hexadecimal hash of the server destination", type=str)
|
"-s",
|
||||||
|
"--server",
|
||||||
|
action="store_true",
|
||||||
|
help="wait for incoming link requests from clients"
|
||||||
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
"--config",
|
||||||
|
action="store",
|
||||||
|
default=None,
|
||||||
|
help="path to alternative Reticulum config directory",
|
||||||
|
type=str
|
||||||
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
"destination",
|
||||||
|
nargs="?",
|
||||||
|
default=None,
|
||||||
|
help="hexadecimal hash of the server destination",
|
||||||
|
type=str
|
||||||
|
)
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
if args.config:
|
if args.config:
|
||||||
|
@ -27,7 +27,13 @@ def program_setup(configpath):
|
|||||||
# existence, which will let the network know they are reachable
|
# existence, which will let the network know they are reachable
|
||||||
# and autoomatically create paths to them, from anywhere else
|
# and autoomatically create paths to them, from anywhere else
|
||||||
# in the network.
|
# in the network.
|
||||||
destination = RNS.Destination(identity, RNS.Destination.IN, RNS.Destination.SINGLE, APP_NAME, "minimalsample")
|
destination = RNS.Destination(
|
||||||
|
identity,
|
||||||
|
RNS.Destination.IN,
|
||||||
|
RNS.Destination.SINGLE,
|
||||||
|
APP_NAME,
|
||||||
|
"minimalsample"
|
||||||
|
)
|
||||||
|
|
||||||
# We configure the destination to automatically prove all
|
# We configure the destination to automatically prove all
|
||||||
# packets adressed to it. By doing this, RNS will automatically
|
# packets adressed to it. By doing this, RNS will automatically
|
||||||
@ -44,7 +50,11 @@ def program_setup(configpath):
|
|||||||
|
|
||||||
def announceLoop(destination):
|
def announceLoop(destination):
|
||||||
# Let the user know that everything is ready
|
# Let the user know that everything is ready
|
||||||
RNS.log("Minimal example "+RNS.prettyhexrep(destination.hash)+" running, hit enter to manually send an announce (Ctrl-C to quit)")
|
RNS.log(
|
||||||
|
"Minimal example "+
|
||||||
|
RNS.prettyhexrep(destination.hash)+
|
||||||
|
" running, hit enter to manually send an announce (Ctrl-C to quit)"
|
||||||
|
)
|
||||||
|
|
||||||
# We enter a loop that runs until the users exits.
|
# We enter a loop that runs until the users exits.
|
||||||
# If the user hits enter, we will announce our server
|
# If the user hits enter, we will announce our server
|
||||||
@ -65,8 +75,18 @@ def announceLoop(destination):
|
|||||||
# the desired program mode.
|
# the desired program mode.
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
try:
|
try:
|
||||||
parser = argparse.ArgumentParser(description="Bare minimum example to start Reticulum and create a destination")
|
parser = argparse.ArgumentParser(
|
||||||
parser.add_argument("--config", action="store", default=None, help="path to alternative Reticulum config directory", type=str)
|
description="Minimal example to start Reticulum and create a destination"
|
||||||
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
"--config",
|
||||||
|
action="store",
|
||||||
|
default=None,
|
||||||
|
help="path to alternative Reticulum config directory",
|
||||||
|
type=str
|
||||||
|
)
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
if args.config:
|
if args.config:
|
||||||
|
Loading…
Reference in New Issue
Block a user