diff options
Diffstat (limited to 'lldb/source/API/SBCommunication.cpp')
-rw-r--r-- | lldb/source/API/SBCommunication.cpp | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/lldb/source/API/SBCommunication.cpp b/lldb/source/API/SBCommunication.cpp new file mode 100644 index 00000000000..e2a791750a8 --- /dev/null +++ b/lldb/source/API/SBCommunication.cpp @@ -0,0 +1,194 @@ +//===-- SBCommunication.cpp -------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "lldb/API/SBCommunication.h" +#include "lldb/API/SBBroadcaster.h" +#include "lldb/Core/Communication.h" +#include "lldb/Core/ConnectionFileDescriptor.h" + +using namespace lldb; +using namespace lldb_private; + + + +SBCommunication::SBCommunication() : + m_lldb_object (NULL), + m_lldb_object_owned (false) +{ +} + +SBCommunication::SBCommunication(const char * broadcaster_name) : + m_lldb_object (new Communication (broadcaster_name)), + m_lldb_object_owned (true) +{ +} + +SBCommunication::~SBCommunication() +{ + if (m_lldb_object && m_lldb_object_owned) + delete m_lldb_object; + m_lldb_object = NULL; + m_lldb_object_owned = false; +} + +ConnectionStatus +SBCommunication::CheckIfBytesAvailable () +{ + if (m_lldb_object) + return m_lldb_object->BytesAvailable (0, NULL); + return eConnectionStatusNoConnection; +} + +ConnectionStatus +SBCommunication::WaitForBytesAvailableInfinite () +{ + if (m_lldb_object) + return m_lldb_object->BytesAvailable (UINT32_MAX, NULL); + return eConnectionStatusNoConnection; +} + +ConnectionStatus +SBCommunication::WaitForBytesAvailableWithTimeout (uint32_t timeout_usec) +{ + if (m_lldb_object) + return m_lldb_object->BytesAvailable (timeout_usec, NULL); + return eConnectionStatusNoConnection; +} + +ConnectionStatus +SBCommunication::Connect (const char *url) +{ + if (m_lldb_object) + { + if (!m_lldb_object->HasConnection ()) + m_lldb_object->SetConnection (new ConnectionFileDescriptor()); + return m_lldb_object->Connect (url, NULL); + } + return eConnectionStatusNoConnection; +} + +ConnectionStatus +SBCommunication::AdoptFileDesriptor (int fd, bool owns_fd) +{ + if (m_lldb_object) + { + if (m_lldb_object->HasConnection ()) + { + if (m_lldb_object->IsConnected()) + m_lldb_object->Disconnect (); + } + m_lldb_object->SetConnection (new ConnectionFileDescriptor (fd, owns_fd)); + if (m_lldb_object->IsConnected()) + return eConnectionStatusSuccess; + else + return eConnectionStatusLostConnection; + } + return eConnectionStatusNoConnection; +} + + +ConnectionStatus +SBCommunication::Disconnect () +{ + if (m_lldb_object) + return m_lldb_object->Disconnect (); + return eConnectionStatusNoConnection; +} + +bool +SBCommunication::IsConnected () const +{ + if (m_lldb_object) + return m_lldb_object->IsConnected (); + return false; +} + +size_t +SBCommunication::Read (void *dst, size_t dst_len, uint32_t timeout_usec, ConnectionStatus &status) +{ + if (m_lldb_object) + return m_lldb_object->Read (dst, dst_len, timeout_usec, status, NULL); + status = eConnectionStatusNoConnection; + return 0; +} + + +size_t +SBCommunication::Write (const void *src, size_t src_len, ConnectionStatus &status) +{ + if (m_lldb_object) + return m_lldb_object->Write (src, src_len, status, NULL); + status = eConnectionStatusNoConnection; + return 0; +} + +bool +SBCommunication::ReadThreadStart () +{ + if (m_lldb_object) + return m_lldb_object->StartReadThread (); + return false; +} + + +bool +SBCommunication::ReadThreadStop () +{ + if (m_lldb_object) + return m_lldb_object->StopReadThread (); + return false; +} + +bool +SBCommunication::ReadThreadIsRunning () +{ + if (m_lldb_object) + return m_lldb_object->ReadThreadIsRunning (); + return false; +} + +bool +SBCommunication::SetReadThreadBytesReceivedCallback +( + ReadThreadBytesReceived callback, + void *callback_baton +) +{ + if (m_lldb_object) + { + m_lldb_object->SetReadThreadBytesReceivedCallback (callback, callback_baton); + return true; + } + return false; +} + +SBBroadcaster +SBCommunication::GetBroadcaster () +{ + SBBroadcaster broadcaster (m_lldb_object, false); + return broadcaster; +} + + +// +//void +//SBCommunication::CreateIfNeeded () +//{ +// if (m_lldb_object == NULL) +// { +// static uint32_t g_broadcaster_num; +// char broadcaster_name[256]; +// ::snprintf (name, broadcaster_name, "%p SBCommunication", this); +// m_lldb_object = new Communication (broadcaster_name); +// m_lldb_object_owned = true; +// } +// assert (m_lldb_object); +//} +// +// |