about summary refs log tree commit diff
path: root/third_party/nix/src/libstore/ssh.hh
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/nix/src/libstore/ssh.hh')
-rw-r--r--third_party/nix/src/libstore/ssh.hh45
1 files changed, 45 insertions, 0 deletions
diff --git a/third_party/nix/src/libstore/ssh.hh b/third_party/nix/src/libstore/ssh.hh
new file mode 100644
index 0000000000..4f0f0bd29f
--- /dev/null
+++ b/third_party/nix/src/libstore/ssh.hh
@@ -0,0 +1,45 @@
+#pragma once
+
+#include "util.hh"
+#include "sync.hh"
+
+namespace nix {
+
+class SSHMaster
+{
+private:
+
+    const std::string host;
+    bool fakeSSH;
+    const std::string keyFile;
+    const bool useMaster;
+    const bool compress;
+    const int logFD;
+
+    struct State
+    {
+        Pid sshMaster;
+        std::unique_ptr<AutoDelete> tmpDir;
+        Path socketPath;
+    };
+
+    Sync<State> state_;
+
+    void addCommonSSHOpts(Strings & args);
+
+public:
+
+    SSHMaster(const std::string & host, const std::string & keyFile, bool useMaster, bool compress, int logFD = -1);
+
+    struct Connection
+    {
+        Pid sshPid;
+        AutoCloseFD out, in;
+    };
+
+    std::unique_ptr<Connection> startCommand(const std::string & command);
+
+    Path startMaster();
+};
+
+}