Run Python language bindings and example code through a linter and formatter

This commit is contained in:
Joseph Henry
2021-03-07 21:11:21 -08:00
parent e1d0f92d61
commit dd6cf48d61
2 changed files with 526 additions and 467 deletions

View File

@@ -1,159 +1,157 @@
import time, sys
'''Example low-level socket usage'''
import time
import sys
import libzt
# Where identity files are stored
keyPath = "."
# Network to join
networkId = 0
# Port used by ZeroTier to send encpryted UDP traffic
# NOTE: Should be different from other instances of ZeroTier
# running on the same machine
ztServicePort = 9997
remoteIP = None
# A port your app logic may use
serverPort = 8080
# Flags to keep state
is_joined = False
is_online = False
mode = None
def print_usage():
print("\nUsage: <server|client> <id_path> <nwid> <ztServicePort> <remoteIP> <serverPort>\n")
print(" Ex: python3 example.py server . 0123456789abcdef 9994 8080")
print(" Ex: python3 example.py client . 0123456789abcdef 9994 192.168.22.1 8080\n")
if (len(sys.argv) < 6):
print('Too few arguments')
if (len(sys.argv) > 7):
print('Too many arguments')
exit(0)
#
if (len(sys.argv) < 6 or len(sys.argv) > 7):
print_usage()
if (sys.argv[1] == 'server' and len(sys.argv) == 6):
mode = sys.argv[1]
keyPath = sys.argv[2]
networkId = int(sys.argv[3],16)
ztServicePort = int(sys.argv[4])
serverPort = int(sys.argv[5])
if (sys.argv[1] == 'client' and len(sys.argv) == 7):
mode = sys.argv[1]
keyPath = sys.argv[2]
networkId = int(sys.argv[3],16)
ztServicePort = int(sys.argv[4])
remoteIP = sys.argv[5]
serverPort = int(sys.argv[6])
if (mode is None):
print_usage()
print('mode = ', mode)
print('path = ', keyPath)
print('networkId = ', networkId)
print('ztServicePort = ', ztServicePort)
print('remoteIP = ', remoteIP)
print('serverPort = ', serverPort)
'''print help'''
print(
"\nUsage: <server|client> <id_path> <nwid> <zt_service_port> <remote_ip> <remote_port>\n"
)
print("Ex: python3 demo.py server . 0123456789abcdef 9994 8080")
print("Ex: python3 demo.py client . 0123456789abcdef 9994 192.168.22.1 8080\n")
if len(sys.argv) < 6:
print("Too few arguments")
if len(sys.argv) > 7:
print("Too many arguments")
sys.exit(0)
is_joined = False # Flags to keep state
is_online = False # Flags to keep state
#
# Event handler
#
class MyEventCallbackClass(libzt.EventCallbackClass):
def on_zerotier_event(self, msg):
global is_online
global is_joined
print("eventCode=", msg.eventCode)
if (msg.eventCode == libzt.ZTS_EVENT_NODE_ONLINE):
print("ZTS_EVENT_NODE_ONLINE")
print("nodeId="+hex(msg.node.address))
# The node is now online, you can join/leave networks
is_online = True
if (msg.eventCode == libzt.ZTS_EVENT_NODE_OFFLINE):
print("ZTS_EVENT_NODE_OFFLINE")
if (msg.eventCode == libzt.ZTS_EVENT_NETWORK_READY_IP4):
print("ZTS_EVENT_NETWORK_READY_IP4")
is_joined = True
# The node has successfully joined a network and has an address
# you can perform network calls now
if (msg.eventCode == libzt.ZTS_EVENT_PEER_DIRECT):
print("ZTS_EVENT_PEER_DIRECT")
if (msg.eventCode == libzt.ZTS_EVENT_PEER_RELAY):
print("ZTS_EVENT_PEER_RELAY")
def on_zerotier_event(self, msg):
global is_online
global is_joined
print("eventCode=", msg.eventCode)
if msg.eventCode == libzt.ZTS_EVENT_NODE_ONLINE:
print("ZTS_EVENT_NODE_ONLINE")
print("nodeId=" + hex(msg.node.address))
# The node is now online, you can join/leave networks
is_online = True
if msg.eventCode == libzt.ZTS_EVENT_NODE_OFFLINE:
print("ZTS_EVENT_NODE_OFFLINE")
if msg.eventCode == libzt.ZTS_EVENT_NETWORK_READY_IP4:
print("ZTS_EVENT_NETWORK_READY_IP4")
is_joined = True
# The node has successfully joined a network and has an address
# you can perform network calls now
if msg.eventCode == libzt.ZTS_EVENT_PEER_DIRECT:
print("ZTS_EVENT_PEER_DIRECT")
if msg.eventCode == libzt.ZTS_EVENT_PEER_RELAY:
print("ZTS_EVENT_PEER_RELAY")
#
# Example start and join logic
# Main
#
print("Starting ZeroTier...");
eventCallback = MyEventCallbackClass()
libzt.start(keyPath, eventCallback, ztServicePort)
print("Waiting for node to come online...")
while (not is_online):
time.sleep(1)
print("Joining network:", hex(networkId));
libzt.join(networkId)
while (not is_joined):
time.sleep(1) # You can ping this app at this point
print('Joined network')
def main():
global is_online
global is_joined
key_file_path = "." # Where identity files are stored
network_id = 0 # Network to join
# Port used by ZeroTier to send encpryted UDP traffic
# NOTE: Should be different from other instances of ZeroTier
# running on the same machine
zt_service_port = 9997
remote_ip = None # ZeroTier IP of remote node
remote_port = 8080 # ZeroTier port your app logic may use
mode = None # client|server
if len(sys.argv) < 6 or len(sys.argv) > 7:
print_usage()
if sys.argv[1] == "server" and len(sys.argv) == 6:
mode = sys.argv[1]
key_file_path = sys.argv[2]
network_id = int(sys.argv[3], 16)
zt_service_port = int(sys.argv[4])
remote_port = int(sys.argv[5])
if sys.argv[1] == "client" and len(sys.argv) == 7:
mode = sys.argv[1]
key_file_path = sys.argv[2]
network_id = int(sys.argv[3], 16)
zt_service_port = int(sys.argv[4])
remote_ip = sys.argv[5]
remote_port = int(sys.argv[6])
if mode is None:
print_usage()
print("mode = ", mode)
print("path = ", key_file_path)
print("network_id = ", network_id)
print("zt_service_port = ", zt_service_port)
print("remote_ip = ", remote_ip)
print("remote_port = ", remote_port)
#
# Example server
#
if (mode == 'server'):
print("Starting server...")
serv = libzt.socket(libzt.ZTS_AF_INET, libzt.ZTS_SOCK_STREAM, 0)
try:
#serv.setblocking(True)
serv.bind(('::', serverPort))
serv.listen(5)
while True:
conn, addr = serv.accept()
print('Accepted connection from: ', addr)
while True:
print('recv:')
data = conn.recv(4096)
if data:
print('data = ', data)
#print(type(b'what'))
#exit(0)
if not data: break
print('send:')
#bytes(data, 'ascii') + b'\x00'
n_bytes = conn.send(data) # echo back to the server
print('sent ' + str(n_bytes) + ' byte(s)')
conn.close()
print('client disconnected')
except Exception as e:
print(e)
print('errno=',libzt.errno()) # See include/ZeroTierSockets.h for codes
#
# Example start and join logic
#
print("Starting ZeroTier...")
event_callback = MyEventCallbackClass()
libzt.start(key_file_path, event_callback, zt_service_port)
print("Waiting for node to come online...")
while not is_online:
time.sleep(1)
print("Joining network:", hex(network_id))
libzt.join(network_id)
while not is_joined:
time.sleep(1) # You can ping this app at this point
print("Joined network")
#
# Example server
#
if mode == "server":
print("Starting server...")
serv = libzt.socket(libzt.ZTS_AF_INET, libzt.ZTS_SOCK_STREAM, 0)
try:
# serv.setblocking(True)
serv.bind(("0.0.0.0", remote_port))
serv.listen(5)
while True:
conn, addr = serv.accept()
print("Accepted connection from: ", addr)
while True:
print("recv:")
data = conn.recv(4096)
if data:
print("data = ", data)
# print(type(b'what'))
# exit(0)
if not data:
break
print("send:")
# bytes(data, 'ascii') + b'\x00'
n_bytes = conn.send(data) # echo back to the server
print("sent " + str(n_bytes) + " byte(s)")
conn.close()
print("client disconnected")
except Exception as ex:
print(ex)
print("errno=", libzt.errno()) # See include/ZeroTierSockets.h for codes
#
# Example client
#
if (mode == 'client'):
print("Starting client...")
client = libzt.socket(libzt.ZTS_AF_INET, libzt.ZTS_SOCK_STREAM, 0)
try:
print("connecting...")
client.connect((remoteIP, serverPort))
print("send:")
data = 'Hello, world!'
client.send(data)
data = client.recv(1024)
print('Received', repr(data))
except Exception as e:
print(e)
print('errno=',libzt.errno())
#
# Example client
#
if mode == "client":
print("Starting client...")
client = libzt.socket(libzt.ZTS_AF_INET, libzt.ZTS_SOCK_STREAM, 0)
try:
print("connecting...")
client.connect((remote_ip, remote_port))
print("send:")
data = "Hello, world!"
client.send(data)
data = client.recv(1024)
print("Received", repr(data))
except Exception as ex:
print(ex)
print("errno=", libzt.errno())
if __name__ == "__main__":
main()