From 0aad2437c516c6c7e506179760c8b5e6556be8b1 Mon Sep 17 00:00:00 2001 From: Kevin O'Connor Date: Tue, 11 Aug 2020 16:26:07 -0400 Subject: [PATCH] webhooks: Specify server_address on klippy command-line Don't default to "/tmp/klippy_uds" for the webhooks unix domain socket filename. Instead, require the filename to be specified on the command-line (via a new "-a" parameter). Signed-off-by: Kevin O'Connor --- klippy/klippy.py | 5 ++++- klippy/webhooks.py | 15 +++++++-------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/klippy/klippy.py b/klippy/klippy.py index 6a24d4a3..33a96a7a 100644 --- a/klippy/klippy.py +++ b/klippy/klippy.py @@ -247,6 +247,8 @@ def main(): opts.add_option("-I", "--input-tty", dest="inputtty", default='/tmp/printer', help="input tty name (default is /tmp/printer)") + opts.add_option("-a", "--api-server", dest="apiserver", + help="api server unix domain socket filename") opts.add_option("-l", "--logfile", dest="logfile", help="write log to file instead of stderr") opts.add_option("-v", action="store_true", dest="verbose", @@ -259,7 +261,8 @@ def main(): options, args = opts.parse_args() if len(args) != 1: opts.error("Incorrect number of arguments") - start_args = {'config_file': args[0], 'start_reason': 'startup'} + start_args = {'config_file': args[0], 'apiserver': options.apiserver, + 'start_reason': 'startup'} debuglevel = logging.INFO if options.verbose: diff --git a/klippy/webhooks.py b/klippy/webhooks.py index fa7f073a..de480d27 100644 --- a/klippy/webhooks.py +++ b/klippy/webhooks.py @@ -11,8 +11,6 @@ import errno import json import homing -SERVER_ADDRESS = "/tmp/klippy_uds" - # Json decodes strings as unicode types in Python 2.x. This doesn't # play well with some parts of Klipper (particuarly displays), so we # need to create an object hook. This solution borrowed from: @@ -98,15 +96,16 @@ class ServerSocket: self.reactor = printer.get_reactor() self.sock = self.fd_handle = None self.clients = {} - is_fileinput = (printer.get_start_args().get('debuginput') - is not None) - if is_fileinput: - # Do not enable server in batch mode + start_args = printer.get_start_args() + server_address = start_args.get('apiserver') + is_fileinput = (start_args.get('debuginput') is not None) + if not server_address or is_fileinput: + # Do not enable server return - self._remove_socket_file(SERVER_ADDRESS) + self._remove_socket_file(server_address) self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) self.sock.setblocking(0) - self.sock.bind(SERVER_ADDRESS) + self.sock.bind(server_address) self.sock.listen(1) self.fd_handle = self.reactor.register_fd( self.sock.fileno(), self._handle_accept)