forked from OSchip/llvm-project
195 lines
4.4 KiB
C++
195 lines
4.4 KiB
C++
//===-- 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);
|
|
//}
|
|
//
|
|
//
|