| //===-- 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); |
| //} |
| // |
| // |