summaryrefslogtreecommitdiffstats
path: root/lldb/source/API/SBCommunication.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/API/SBCommunication.cpp')
-rw-r--r--lldb/source/API/SBCommunication.cpp194
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);
+//}
+//
+//
OpenPOWER on IntegriCloud