#!/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())