import socket import os from sshuttle.helpers import debug1 def _notify(message): addr = os.environ.get("NOTIFY_SOCKET", None) if not addr or len(addr) == 1 or addr[0] not in ('/', '@'): return False addr = '\0' + addr[1:] if addr[0] == '@' else addr try: sock = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM) except (OSError, IOError) as e: debug1("Error creating socket to notify systemd: %s\n" % e) return False if not message: return False assert isinstance(message, bytes) try: return (sock.sendto(message, addr) > 0) except (OSError, IOError) as e: debug1("Error notifying systemd: %s\n" % e) return False def send(*messages): return _notify(b'\n'.join(messages)) def ready(): return b"READY=1" def stop(): return b"STOPPING=1" def status(message): return b"STATUS=%s" % message.encode('utf8')