LLDB mainline
ConnectionFileDescriptorPosix.h
Go to the documentation of this file.
1//===-- ConnectionFileDescriptorPosix.h -------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLDB_HOST_POSIX_CONNECTIONFILEDESCRIPTORPOSIX_H
10#define LLDB_HOST_POSIX_CONNECTIONFILEDESCRIPTORPOSIX_H
11
12#include <atomic>
13#include <memory>
14#include <mutex>
15
16#include "lldb/lldb-forward.h"
17
18#include "lldb/Host/Pipe.h"
19#include "lldb/Host/Socket.h"
21
22namespace lldb_private {
23
24class Status;
25
27public:
28 typedef llvm::function_ref<void(llvm::StringRef local_socket_id)>
30
32
33 ConnectionFileDescriptor(int fd, bool owns_fd);
34
35 ConnectionFileDescriptor(std::unique_ptr<Socket> socket_up);
36
38
39 bool IsConnected() const override;
40
41 lldb::ConnectionStatus Connect(llvm::StringRef url,
42 Status *error_ptr) override;
43
44 lldb::ConnectionStatus Connect(llvm::StringRef url,
45 socket_id_callback_type socket_id_callback,
46 Status *error_ptr);
47
48 lldb::ConnectionStatus Disconnect(Status *error_ptr) override;
49
50 size_t Read(void *dst, size_t dst_len, const Timeout<std::micro> &timeout,
51 lldb::ConnectionStatus &status, Status *error_ptr) override;
52
53 size_t Write(const void *src, size_t src_len, lldb::ConnectionStatus &status,
54 Status *error_ptr) override;
55
56 std::string GetURI() override;
57
59 Status *error_ptr);
60
61 bool InterruptRead() override;
62
63 lldb::IOObjectSP GetReadObject() override { return m_io_sp; }
64
65protected:
66 void OpenCommandPipe();
67
68 void CloseCommandPipe();
69
72 llvm::StringRef socket_name,
73 llvm::function_ref<void(Socket &)> post_listen_callback,
74 Status *error_ptr);
75
77 llvm::StringRef socket_name,
78 Status *error_ptr);
79
80 lldb::ConnectionStatus AcceptTCP(llvm::StringRef host_and_port,
81 socket_id_callback_type socket_id_callback,
82 Status *error_ptr);
83
84 lldb::ConnectionStatus ConnectTCP(llvm::StringRef host_and_port,
85 socket_id_callback_type socket_id_callback,
86 Status *error_ptr);
87
88 lldb::ConnectionStatus ConnectUDP(llvm::StringRef args,
89 socket_id_callback_type socket_id_callback,
90 Status *error_ptr);
91
93 ConnectNamedSocket(llvm::StringRef socket_name,
94 socket_id_callback_type socket_id_callback,
95 Status *error_ptr);
96
98 AcceptNamedSocket(llvm::StringRef socket_name,
99 socket_id_callback_type socket_id_callback,
100 Status *error_ptr);
101
103 AcceptAbstractSocket(llvm::StringRef socket_name,
104 socket_id_callback_type socket_id_callback,
105 Status *error_ptr);
106
108 ConnectAbstractSocket(llvm::StringRef socket_name,
109 socket_id_callback_type socket_id_callback,
110 Status *error_ptr);
111
112 lldb::ConnectionStatus ConnectFD(llvm::StringRef args,
113 socket_id_callback_type socket_id_callback,
114 Status *error_ptr);
115
116 lldb::ConnectionStatus ConnectFile(llvm::StringRef args,
117 socket_id_callback_type socket_id_callback,
118 Status *error_ptr);
119
121 ConnectSerialPort(llvm::StringRef args,
122 socket_id_callback_type socket_id_callback,
123 Status *error_ptr);
124
126
128 std::recursive_mutex m_mutex;
129 std::atomic<bool> m_shutting_down; // This marks that we are shutting down so
130 // if we get woken up from
131 // BytesAvailable to disconnect, we won't try to read again.
132
133 std::string m_uri;
134
135private:
139};
140
141} // namespace lldb_private
142
143#endif // LLDB_HOST_POSIX_CONNECTIONFILEDESCRIPTORPOSIX_H
const ConnectionFileDescriptor & operator=(const ConnectionFileDescriptor &)=delete
lldb::ConnectionStatus AcceptTCP(llvm::StringRef host_and_port, socket_id_callback_type socket_id_callback, Status *error_ptr)
ConnectionFileDescriptor(const ConnectionFileDescriptor &)=delete
lldb::ConnectionStatus ConnectNamedSocket(llvm::StringRef socket_name, socket_id_callback_type socket_id_callback, Status *error_ptr)
lldb::ConnectionStatus AcceptAbstractSocket(llvm::StringRef socket_name, socket_id_callback_type socket_id_callback, Status *error_ptr)
lldb::ConnectionStatus ConnectUDP(llvm::StringRef args, socket_id_callback_type socket_id_callback, Status *error_ptr)
lldb::ConnectionStatus ConnectSerialPort(llvm::StringRef args, socket_id_callback_type socket_id_callback, Status *error_ptr)
bool InterruptRead() override
Interrupts an ongoing Read() operation.
lldb::ConnectionStatus Connect(llvm::StringRef url, Status *error_ptr) override
Connect using the connect string url.
bool IsConnected() const override
Check if the connection is valid.
lldb::ConnectionStatus AcceptNamedSocket(llvm::StringRef socket_name, socket_id_callback_type socket_id_callback, Status *error_ptr)
size_t Write(const void *src, size_t src_len, lldb::ConnectionStatus &status, Status *error_ptr) override
The actual write function that attempts to write to the communications protocol.
lldb::IOObjectSP GetReadObject() override
Returns the underlying IOObject used by the Connection.
lldb::ConnectionStatus AcceptSocket(Socket::SocketProtocol socket_protocol, llvm::StringRef socket_name, llvm::function_ref< void(Socket &)> post_listen_callback, Status *error_ptr)
lldb::ConnectionStatus ConnectFD(llvm::StringRef args, socket_id_callback_type socket_id_callback, Status *error_ptr)
lldb::ConnectionStatus ConnectAbstractSocket(llvm::StringRef socket_name, socket_id_callback_type socket_id_callback, Status *error_ptr)
lldb::ConnectionStatus Disconnect(Status *error_ptr) override
Disconnect the communications connection if one is currently connected.
lldb::ConnectionStatus BytesAvailable(const Timeout< std::micro > &timeout, Status *error_ptr)
lldb::ConnectionStatus ConnectFile(llvm::StringRef args, socket_id_callback_type socket_id_callback, Status *error_ptr)
lldb::ConnectionStatus ConnectSocket(Socket::SocketProtocol socket_protocol, llvm::StringRef socket_name, Status *error_ptr)
std::string GetURI() override
Returns a URI that describes this connection object.
lldb::ConnectionStatus ConnectTCP(llvm::StringRef host_and_port, socket_id_callback_type socket_id_callback, Status *error_ptr)
size_t Read(void *dst, size_t dst_len, const Timeout< std::micro > &timeout, lldb::ConnectionStatus &status, Status *error_ptr) override
The read function that attempts to read from the connection.
llvm::function_ref< void(llvm::StringRef local_socket_id)> socket_id_callback_type
Connection()=default
Default constructor.
An error handling class.
Definition Status.h:118
A class that represents a running process on the host machine.
PipePosix Pipe
Definition Pipe.h:20
std::shared_ptr< lldb_private::IOObject > IOObjectSP
ConnectionStatus
Connection Status Types.