1 //===-- RNBSocket.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 // Created by Greg Clayton on 12/12/07. 10 // 11 //===----------------------------------------------------------------------===// 12 13 #ifndef LLDB_TOOLS_DEBUGSERVER_SOURCE_RNBSOCKET_H 14 #define LLDB_TOOLS_DEBUGSERVER_SOURCE_RNBSOCKET_H 15 16 #include "DNBTimer.h" 17 #include "RNBDefs.h" 18 #include <string> 19 #include <sys/socket.h> 20 #include <sys/types.h> 21 22 #ifdef WITH_LOCKDOWN 23 #include "lockdown.h" 24 #endif 25 26 class RNBSocket { 27 public: 28 typedef void (*PortBoundCallback)(const void *baton, uint16_t port); 29 RNBSocket()30 RNBSocket() 31 : m_fd(-1), 32 #ifdef WITH_LOCKDOWN 33 m_fd_from_lockdown(false), m_ld_conn(), 34 #endif 35 m_timer(true) // Make a thread safe timer 36 { 37 } ~RNBSocket(void)38 ~RNBSocket(void) { Disconnect(false); } 39 40 rnb_err_t Listen(const char *listen_host, uint16_t port, 41 PortBoundCallback callback, const void *callback_baton); 42 rnb_err_t Connect(const char *host, uint16_t port); 43 44 rnb_err_t useFD(int fd); 45 46 #ifdef WITH_LOCKDOWN 47 rnb_err_t ConnectToService(); 48 #endif 49 rnb_err_t OpenFile(const char *path); 50 rnb_err_t Disconnect(bool save_errno); 51 rnb_err_t Read(std::string &p); 52 rnb_err_t Write(const void *buffer, size_t length); 53 IsConnected()54 bool IsConnected() const { return m_fd != -1; } 55 void SaveErrno(int curr_errno); Timer()56 DNBTimer &Timer() { return m_timer; } 57 58 static int SetSocketOption(int fd, int level, int option_name, 59 int option_value); 60 61 private: 62 RNBSocket(const RNBSocket &) = delete; 63 64 protected: 65 rnb_err_t ClosePort(int &fd, bool save_errno); 66 67 int m_fd; // Socket we use to communicate once conn established 68 69 #ifdef WITH_LOCKDOWN 70 bool m_fd_from_lockdown; 71 lockdown_connection m_ld_conn; 72 #endif 73 74 DNBTimer m_timer; 75 }; 76 77 #endif // LLDB_TOOLS_DEBUGSERVER_SOURCE_RNBSOCKET_H 78