diff options
Diffstat (limited to 'tools/debugserver/source/RNBSocket.h')
-rw-r--r-- | tools/debugserver/source/RNBSocket.h | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/tools/debugserver/source/RNBSocket.h b/tools/debugserver/source/RNBSocket.h new file mode 100644 index 000000000000..32f4ebeed2a4 --- /dev/null +++ b/tools/debugserver/source/RNBSocket.h @@ -0,0 +1,85 @@ +//===-- RNBSocket.h ---------------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// Created by Greg Clayton on 12/12/07. +// +//===----------------------------------------------------------------------===// + +#ifndef __RNBSocket_h__ +#define __RNBSocket_h__ + +#include "RNBDefs.h" +#include <sys/socket.h> +#include <sys/types.h> +#include <string> +#include "DNBTimer.h" + +#ifdef WITH_LOCKDOWN +#include "lockdown.h" +#endif + +class RNBSocket +{ +public: + typedef void (*PortBoundCallback) (const void *baton, uint16_t port); + + RNBSocket () : + m_fd (-1), +#ifdef WITH_LOCKDOWN + m_fd_from_lockdown (false), + m_ld_conn (), +#endif + m_timer (true) // Make a thread safe timer + { + } + ~RNBSocket (void) + { + Disconnect (false); + } + + rnb_err_t Listen (const char *listen_host, + uint16_t port, + PortBoundCallback callback, + const void *callback_baton); + rnb_err_t Connect (const char *host, uint16_t port); + + rnb_err_t useFD(int fd); + +#ifdef WITH_LOCKDOWN + rnb_err_t ConnectToService(); +#endif + rnb_err_t OpenFile (const char *path); + rnb_err_t Disconnect (bool save_errno); + rnb_err_t Read (std::string &p); + rnb_err_t Write (const void *buffer, size_t length); + + bool IsConnected () const { return m_fd != -1; } + void SaveErrno (int curr_errno); + DNBTimer& Timer() { return m_timer; } + + static int SetSocketOption(int fd, int level, int option_name, int option_value); +private: + // Outlaw some constructors + RNBSocket (const RNBSocket &); + +protected: + rnb_err_t ClosePort (int& fd, bool save_errno); + + int m_fd; // Socket we use to communicate once conn established + +#ifdef WITH_LOCKDOWN + bool m_fd_from_lockdown; + lockdown_connection m_ld_conn; +#endif + + DNBTimer m_timer; +}; + + +#endif // #ifndef __RNBSocket_h__ |