summaryrefslogtreecommitdiffstats
path: root/contrib/llvm/tools/lldb/source/API/SBCommunication.cpp
diff options
context:
space:
mode:
authoremaste <emaste@FreeBSD.org>2013-08-23 18:06:42 +0000
committeremaste <emaste@FreeBSD.org>2013-08-23 18:06:42 +0000
commit424d4dadd208e2a1e9a43c3d55f47f03ba0c4509 (patch)
tree05d762b98a499804ce690e6ce04033f1ddf4dee6 /contrib/llvm/tools/lldb/source/API/SBCommunication.cpp
parentcde487f27a84e02a560384f75178fddca68740f6 (diff)
parentdcd15f81789e389c1cb27d264fcdddfd0a6002bd (diff)
downloadFreeBSD-src-424d4dadd208e2a1e9a43c3d55f47f03ba0c4509.zip
FreeBSD-src-424d4dadd208e2a1e9a43c3d55f47f03ba0c4509.tar.gz
Merge lldb r188801 to contrib/llvm/tools/lldb/
Diffstat (limited to 'contrib/llvm/tools/lldb/source/API/SBCommunication.cpp')
-rw-r--r--contrib/llvm/tools/lldb/source/API/SBCommunication.cpp285
1 files changed, 285 insertions, 0 deletions
diff --git a/contrib/llvm/tools/lldb/source/API/SBCommunication.cpp b/contrib/llvm/tools/lldb/source/API/SBCommunication.cpp
new file mode 100644
index 0000000..10feae5
--- /dev/null
+++ b/contrib/llvm/tools/lldb/source/API/SBCommunication.cpp
@@ -0,0 +1,285 @@
+//===-- 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"
+#include "lldb/Core/Log.h"
+
+using namespace lldb;
+using namespace lldb_private;
+
+
+
+SBCommunication::SBCommunication() :
+ m_opaque (NULL),
+ m_opaque_owned (false)
+{
+}
+
+SBCommunication::SBCommunication(const char * broadcaster_name) :
+ m_opaque (new Communication (broadcaster_name)),
+ m_opaque_owned (true)
+{
+ Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
+
+ if (log)
+ log->Printf ("SBCommunication::SBCommunication (broadcaster_name=\"%s\") => "
+ "SBCommunication(%p)", broadcaster_name, m_opaque);
+}
+
+SBCommunication::~SBCommunication()
+{
+ if (m_opaque && m_opaque_owned)
+ delete m_opaque;
+ m_opaque = NULL;
+ m_opaque_owned = false;
+}
+
+bool
+SBCommunication::IsValid () const
+{
+ return m_opaque != NULL;
+}
+
+bool
+SBCommunication::GetCloseOnEOF ()
+{
+ if (m_opaque)
+ return m_opaque->GetCloseOnEOF ();
+ return false;
+}
+
+void
+SBCommunication::SetCloseOnEOF (bool b)
+{
+ if (m_opaque)
+ m_opaque->SetCloseOnEOF (b);
+}
+
+ConnectionStatus
+SBCommunication::Connect (const char *url)
+{
+ if (m_opaque)
+ {
+ if (!m_opaque->HasConnection ())
+ m_opaque->SetConnection (new ConnectionFileDescriptor());
+ return m_opaque->Connect (url, NULL);
+ }
+ return eConnectionStatusNoConnection;
+}
+
+ConnectionStatus
+SBCommunication::AdoptFileDesriptor (int fd, bool owns_fd)
+{
+ Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
+
+ ConnectionStatus status = eConnectionStatusNoConnection;
+ if (m_opaque)
+ {
+ if (m_opaque->HasConnection ())
+ {
+ if (m_opaque->IsConnected())
+ m_opaque->Disconnect();
+ }
+ m_opaque->SetConnection (new ConnectionFileDescriptor (fd, owns_fd));
+ if (m_opaque->IsConnected())
+ status = eConnectionStatusSuccess;
+ else
+ status = eConnectionStatusLostConnection;
+ }
+
+ if (log)
+ log->Printf ("SBCommunication(%p)::AdoptFileDescriptor (fd=%d, ownd_fd=%i) => %s",
+ m_opaque, fd, owns_fd, Communication::ConnectionStatusAsCString (status));
+
+ return status;
+}
+
+
+ConnectionStatus
+SBCommunication::Disconnect ()
+{
+ Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
+
+ ConnectionStatus status= eConnectionStatusNoConnection;
+ if (m_opaque)
+ status = m_opaque->Disconnect ();
+
+ if (log)
+ log->Printf ("SBCommunication(%p)::Disconnect () => %s", m_opaque,
+ Communication::ConnectionStatusAsCString (status));
+
+ return status;
+}
+
+bool
+SBCommunication::IsConnected () const
+{
+ Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
+ bool result = false;
+ if (m_opaque)
+ result = m_opaque->IsConnected ();
+
+ if (log)
+ log->Printf ("SBCommunication(%p)::IsConnected () => %i", m_opaque, result);
+
+ return false;
+}
+
+size_t
+SBCommunication::Read (void *dst, size_t dst_len, uint32_t timeout_usec, ConnectionStatus &status)
+{
+ Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
+ if (log)
+ log->Printf ("SBCommunication(%p)::Read (dst=%p, dst_len=%" PRIu64 ", timeout_usec=%u, &status)...",
+ m_opaque,
+ dst,
+ (uint64_t)dst_len,
+ timeout_usec);
+ size_t bytes_read = 0;
+ if (m_opaque)
+ bytes_read = m_opaque->Read (dst, dst_len, timeout_usec, status, NULL);
+ else
+ status = eConnectionStatusNoConnection;
+
+ if (log)
+ log->Printf ("SBCommunication(%p)::Read (dst=%p, dst_len=%" PRIu64 ", timeout_usec=%u, &status=%s) => %" PRIu64,
+ m_opaque,
+ dst,
+ (uint64_t)dst_len,
+ timeout_usec,
+ Communication::ConnectionStatusAsCString (status),
+ (uint64_t)bytes_read);
+ return bytes_read;
+}
+
+
+size_t
+SBCommunication::Write (const void *src, size_t src_len, ConnectionStatus &status)
+{
+ size_t bytes_written = 0;
+ if (m_opaque)
+ bytes_written = m_opaque->Write (src, src_len, status, NULL);
+ else
+ status = eConnectionStatusNoConnection;
+
+ Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
+ if (log)
+ log->Printf ("SBCommunication(%p)::Write (src=%p, src_len=%" PRIu64 ", &status=%s) => %" PRIu64,
+ m_opaque, src, (uint64_t)src_len, Communication::ConnectionStatusAsCString (status), (uint64_t)bytes_written);
+
+ return 0;
+}
+
+bool
+SBCommunication::ReadThreadStart ()
+{
+ Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
+
+ bool success = false;
+ if (m_opaque)
+ success = m_opaque->StartReadThread ();
+
+ if (log)
+ log->Printf ("SBCommunication(%p)::ReadThreadStart () => %i", m_opaque, success);
+
+ return success;
+}
+
+
+bool
+SBCommunication::ReadThreadStop ()
+{
+ Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
+ if (log)
+ log->Printf ("SBCommunication(%p)::ReadThreadStop ()...", m_opaque);
+
+ bool success = false;
+ if (m_opaque)
+ success = m_opaque->StopReadThread ();
+
+ if (log)
+ log->Printf ("SBCommunication(%p)::ReadThreadStop () => %i", m_opaque, success);
+
+ return success;
+}
+
+bool
+SBCommunication::ReadThreadIsRunning ()
+{
+ bool result = false;
+ if (m_opaque)
+ result = m_opaque->ReadThreadIsRunning ();
+ Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
+ if (log)
+ log->Printf ("SBCommunication(%p)::ReadThreadIsRunning () => %i", m_opaque, result);
+ return result;
+}
+
+bool
+SBCommunication::SetReadThreadBytesReceivedCallback
+(
+ ReadThreadBytesReceived callback,
+ void *callback_baton
+)
+{
+ Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
+
+ bool result = false;
+ if (m_opaque)
+ {
+ m_opaque->SetReadThreadBytesReceivedCallback (callback, callback_baton);
+ result = true;
+ }
+
+ if (log)
+ log->Printf ("SBCommunication(%p)::SetReadThreadBytesReceivedCallback (callback=%p, baton=%p) => %i",
+ m_opaque, callback, callback_baton, result);
+
+ return result;
+}
+
+SBBroadcaster
+SBCommunication::GetBroadcaster ()
+{
+ SBBroadcaster broadcaster (m_opaque, false);
+
+ Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
+
+ if (log)
+ log->Printf ("SBCommunication(%p)::GetBroadcaster () => SBBroadcaster (%p)",
+ m_opaque, broadcaster.get());
+
+ return broadcaster;
+}
+
+const char *
+SBCommunication::GetBroadcasterClass ()
+{
+ return Communication::GetStaticBroadcasterClass().AsCString();
+}
+
+//
+//void
+//SBCommunication::CreateIfNeeded ()
+//{
+// if (m_opaque == NULL)
+// {
+// static uint32_t g_broadcaster_num;
+// char broadcaster_name[256];
+// ::snprintf (name, broadcaster_name, "%p SBCommunication", this);
+// m_opaque = new Communication (broadcaster_name);
+// m_opaque_owned = true;
+// }
+// assert (m_opaque);
+//}
+//
+//
OpenPOWER on IntegriCloud