diff sat/bridge/bridge_constructor/constructors/pb/pb_core_template.py @ 3489:d71a163c0861

bridge (pb): connection can be set to used either UNIX socket or TCP socket: all settings are to be put in `[DEFAULT]` section - `bridge_pb_connection_type` can be set to `unix_socket` or `socket` - for `socket`, `bridge_pb_host` and `bridge_pb_port` can be specified
author Goffi <goffi@goffi.org>
date Sun, 21 Mar 2021 22:00:55 +0100
parents be6d91572633
children 3c7a64d6f49f
line wrap: on
line diff
--- a/sat/bridge/bridge_constructor/constructors/pb/pb_core_template.py	Sun Mar 21 18:23:58 2021 +0100
+++ b/sat/bridge/bridge_constructor/constructors/pb/pb_core_template.py	Sun Mar 21 22:00:55 2021 +0100
@@ -19,9 +19,11 @@
 
 
 import dataclasses
-from sat.core.log import getLogger
+from pathlib import Path
 from twisted.spread import jelly, pb
 from twisted.internet import reactor
+from sat.core.log import getLogger
+from sat.tools import config
 
 log = getLogger(__name__)
 
@@ -103,7 +105,31 @@
     def __init__(self):
         log.info("Init Perspective Broker...")
         self.root = PBRoot()
-        reactor.listenTCP(8789, pb.PBServerFactory(self.root))
+        conf = config.parseMainConf()
+        conn_type = config.getConfig(
+            conf,
+            "",
+            "bridge_pb_connection_type",
+            "unix_socket"
+        )
+        if conn_type == "unix_socket":
+            local_dir = Path(config.getConfig(conf, "", "local_dir")).resolve()
+            socket_path = local_dir / "bridge_pb"
+            log.info(f"using UNIX Socket at {socket_path}")
+            reactor.listenUNIX(
+                str(socket_path), pb.PBServerFactory(self.root), mode=0o600
+            )
+        elif conn_type == "socket":
+            port = int(config.getConfig(
+                conf,
+                "",
+                "bridge_pb_port",
+                8789
+            ))
+            log.info(f"using TCP Socket at port {port}")
+            reactor.listenTCP(port, pb.PBServerFactory(self.root))
+        else:
+            raise ValueError(f"Unknown pb connection type: {conn_type!r}")
 
     def sendSignal(self, name, *args, **kwargs):
         self.root.sendSignal(name, args, kwargs)
@@ -117,7 +143,9 @@
         setattr(self.root, "remote_" + name, callback)
         #  self.root.register_method(name, callback)
 
-    def addMethod(self, name, int_suffix, in_sign, out_sign, method, async_=False, doc={}):
+    def addMethod(
+            self, name, int_suffix, in_sign, out_sign, method, async_=False, doc={}
+    ):
         """Dynamically add a method to PB Bridge"""
         # FIXME: doc parameter is kept only temporary, the time to remove it from calls
         log.debug("Adding method {name} to PB bridge".format(name=name))