Browse Source

Merge pull request #1374 from rszibele/openssl

BOB: fix status command.
pull/1384/head
orignal 5 years ago committed by GitHub
parent
commit
e9fa4e94a6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 33
      libi2pd_client/BOB.cpp
  2. 2
      libi2pd_client/BOB.h

33
libi2pd_client/BOB.cpp

@ -341,10 +341,10 @@ namespace client @@ -341,10 +341,10 @@ namespace client
SendReplyOK();
}
void BOBCommandSession::SendData (const char * data)
void BOBCommandSession::SendRaw (const char * data)
{
std::ostream os(&m_SendBuffer);
os << "DATA " << data << std::endl;
os << data << std::endl;
}
void BOBCommandSession::BuildStatusLine(bool currentTunnel, BOBDestination *dest, std::string &out)
@ -370,7 +370,8 @@ namespace client @@ -370,7 +370,8 @@ namespace client
// build line
std::stringstream ss;
ss << "NICKNAME: " << nickname << " " << "STARTING: " << bool_str(starting) << " "
ss << "DATA "
<< "NICKNAME: " << nickname << " " << "STARTING: " << bool_str(starting) << " "
<< "RUNNING: " << bool_str(running) << " " << "STOPPING: " << bool_str(stopping) << " "
<< "KEYS: " << bool_str(keys) << " " << "QUIET: " << bool_str(quiet) << " "
<< "INPORT: " << inport << " " << "INHOST: " << inhost << " "
@ -654,16 +655,16 @@ namespace client @@ -654,16 +655,16 @@ namespace client
for (const auto& it: destinations)
{
BuildStatusLine(false, it.second, statusLine);
SendData (statusLine.c_str());
SendRaw(statusLine.c_str());
if(m_Nickname.compare(it.second->GetNickname()) == 0)
sentCurrent = true;
}
if(!sentCurrent && !m_Nickname.empty())
{
// add the current tunnel to the list
// add the current tunnel to the list.
// this is for the incomplete tunnel which has not been started yet.
BuildStatusLine(true, m_CurrentDestination, statusLine);
LogPrint(eLogError, statusLine);
SendData(statusLine.c_str());
SendRaw(statusLine.c_str());
}
SendReplyOK ("Listing done");
}
@ -690,21 +691,23 @@ namespace client @@ -690,21 +691,23 @@ namespace client
void BOBCommandSession::StatusCommandHandler (const char * operand, size_t len)
{
LogPrint (eLogDebug, "BOB: status ", operand);
const std::string name = operand;
std::string statusLine;
if (m_Nickname == operand)
// always prefer destination
auto ptr = m_Owner.FindDestination(name);
if(ptr != nullptr)
{
// check current tunnel
BuildStatusLine(true, nullptr, statusLine);
// tunnel destination exists
BuildStatusLine(false, ptr, statusLine);
SendReplyOK(statusLine.c_str());
}
else
{
// check other
std::string name = operand;
auto ptr = m_Owner.FindDestination(name);
if(ptr != nullptr)
if(m_Nickname == name && !name.empty())
{
BuildStatusLine(false, ptr, statusLine);
// tunnel is incomplete / has not been started yet
BuildStatusLine(true, nullptr, statusLine);
SendReplyOK(statusLine.c_str());
}
else

2
libi2pd_client/BOB.h

@ -213,7 +213,7 @@ namespace client @@ -213,7 +213,7 @@ namespace client
void HandleSent (const boost::system::error_code& ecode, std::size_t bytes_transferred);
void SendReplyOK (const char * msg = nullptr);
void SendReplyError (const char * msg);
void SendData (const char * data);
void SendRaw (const char * data);
void BuildStatusLine(bool currentTunnel, BOBDestination *destination, std::string &out);

Loading…
Cancel
Save