57 lines
1.3 KiB
Python
57 lines
1.3 KiB
Python
#!/usr/bin/env python3
|
|
libexec_dir = __LIBEXECDIR__
|
|
|
|
import subprocess
|
|
import sys
|
|
import time
|
|
|
|
def writeall(f, b):
|
|
written = 0
|
|
while written < len(b):
|
|
written += f.write(b[written:])
|
|
|
|
def parse_mac(text):
|
|
parts = text.split(':')
|
|
if len(parts) != 6:
|
|
raise ValueError('Invalid MAC format: %s' % text)
|
|
|
|
try:
|
|
parsed = bytes(int(field, 16) for field in parts)
|
|
except ValueError:
|
|
raise ValueError('Invalid MAC format %s' % text)
|
|
|
|
return parsed
|
|
|
|
nick = input('nick> ').encode('utf-8')
|
|
|
|
proc = subprocess.Popen(['sudo', libexec_dir + '/ethermess-backend', *sys.argv[1:]], stdin = subprocess.PIPE, stdout = sys.stdout, stderr = sys.stderr, bufsize = 0)
|
|
|
|
writeall(proc.stdin, (bytes([0, len(nick)]) + nick))
|
|
|
|
print('s - request status, i - request msgid, m - send message, ^D - quit')
|
|
|
|
try:
|
|
while True:
|
|
command = input('')
|
|
|
|
if command == 's':
|
|
mac = parse_mac(input('mac> '))
|
|
writeall(proc.stdin, b's' + mac)
|
|
|
|
elif command == 'i':
|
|
mac = parse_mac(input('mac> '))
|
|
writeall(proc.stdin, b'i' + mac)
|
|
|
|
elif command == 'm':
|
|
mac = parse_mac(input('mac> '))
|
|
message = input('message> ').encode('utf-8')
|
|
writeall(proc.stdin, b'm' + mac + bytes([len(message) >> 8, len(message) & 0xff]) + message)
|
|
|
|
else:
|
|
print('s - request status, i - request msgid, m - send message, ^D - quit')
|
|
|
|
except EOFError:
|
|
writeall(proc.stdin, b'q')
|
|
|
|
sys.exit(proc.wait())
|