//===-- ConnectionGenericFileWindows.h --------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef liblldb_Host_windows_ConnectionGenericFileWindows_h_ #define liblldb_Host_windows_ConnectionGenericFileWindows_h_ #include "lldb/Host/windows/windows.h" #include "lldb/Utility/Connection.h" #include "lldb/lldb-types.h" namespace lldb_private { class Status; class ConnectionGenericFile : public lldb_private::Connection { public: ConnectionGenericFile(); ConnectionGenericFile(lldb::file_t file, bool owns_file); ~ConnectionGenericFile() override; bool IsConnected() const override; lldb::ConnectionStatus Connect(llvm::StringRef s, Status *error_ptr) override; lldb::ConnectionStatus Disconnect(Status *error_ptr) override; size_t Read(void *dst, size_t dst_len, const Timeout &timeout, lldb::ConnectionStatus &status, Status *error_ptr) override; size_t Write(const void *src, size_t src_len, lldb::ConnectionStatus &status, Status *error_ptr) override; std::string GetURI() override; bool InterruptRead() override; protected: OVERLAPPED m_overlapped; HANDLE m_file; HANDLE m_event_handles[2]; bool m_owns_file; LARGE_INTEGER m_file_position; enum { kBytesAvailableEvent, kInterruptEvent }; private: void InitializeEventHandles(); void IncrementFilePointer(DWORD amount); std::string m_uri; ConnectionGenericFile(const ConnectionGenericFile &) = delete; const ConnectionGenericFile & operator=(const ConnectionGenericFile &) = delete; }; } #endif