Merge topic 'curl-tls-verify'
[kiteware-cmake.git] / Source / cmDebuggerPosixPipeConnection.h
blob42642fad6a41ea097ed685d7cbcdebe795303aab
1 /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
2 file Copyright.txt or https://cmake.org/licensing for details. */
3 #pragma once
5 #include "cmConfigure.h" // IWYU pragma: keep
7 #include <cstddef>
8 #include <future>
9 #include <memory>
10 #include <string>
12 #include <cm3p/cppdap/io.h>
14 #include <sys/un.h>
16 #include "cmDebuggerAdapter.h"
18 namespace cmDebugger {
20 #ifndef _WIN32
22 class cmDebuggerPipeConnection_POSIX
23 : public dap::ReaderWriter
24 , public cmDebuggerConnection
25 , public std::enable_shared_from_this<cmDebuggerPipeConnection_POSIX>
27 public:
28 cmDebuggerPipeConnection_POSIX(std::string name);
29 ~cmDebuggerPipeConnection_POSIX() override;
31 void WaitForConnection() override;
33 bool StartListening(std::string& errorMessage) override;
34 std::shared_ptr<dap::Reader> GetReader() override;
35 std::shared_ptr<dap::Writer> GetWriter() override;
37 // dap::ReaderWriter implementation
39 bool isOpen() override;
40 void close() override;
41 size_t read(void* buffer, size_t n) override;
42 bool write(void const* buffer, size_t n) override;
44 // Used for unit test synchronization
45 std::promise<void> StartedListening;
47 private:
48 void close_listen(); // release listen resources
50 std::string const PipeName;
51 sockaddr_un addr;
52 int listen_fd = -1; // listen fd
53 int rw_pipe = -1; // rw fd
56 using cmDebuggerPipeConnection = cmDebuggerPipeConnection_POSIX;
58 class cmDebuggerPipeClient_POSIX
59 : public dap::ReaderWriter
60 , public std::enable_shared_from_this<cmDebuggerPipeClient_POSIX>
62 public:
63 cmDebuggerPipeClient_POSIX(std::string name);
64 ~cmDebuggerPipeClient_POSIX() override;
65 void WaitForConnection();
67 bool isOpen() override;
68 void close() override;
69 size_t read(void* buffer, size_t n) override;
70 bool write(void const* buffer, size_t n) override;
72 private:
73 std::string const PipeName;
74 int rw_pipe = -1;
77 using cmDebuggerPipeClient = cmDebuggerPipeClient_POSIX;
79 #endif // !_WIN32
81 } // namespace cmDebugger