mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-22 04:04:16 +00:00
BOB 'list' command
This commit is contained in:
parent
8788e1b2fd
commit
9164ac8a3e
41
BOB.cpp
41
BOB.cpp
@ -10,7 +10,7 @@ namespace i2p
|
|||||||
namespace client
|
namespace client
|
||||||
{
|
{
|
||||||
BOBI2PInboundTunnel::BOBI2PInboundTunnel (boost::asio::io_service& service, int port, ClientDestination * localDestination):
|
BOBI2PInboundTunnel::BOBI2PInboundTunnel (boost::asio::io_service& service, int port, ClientDestination * localDestination):
|
||||||
I2PTunnel (service, localDestination),
|
BOBI2PTunnel (service, localDestination),
|
||||||
m_Acceptor (service, boost::asio::ip::tcp::endpoint (boost::asio::ip::tcp::v4(), port)),
|
m_Acceptor (service, boost::asio::ip::tcp::endpoint (boost::asio::ip::tcp::v4(), port)),
|
||||||
m_Timer (service), m_ReceivedData (nullptr), m_ReceivedDataLen (0)
|
m_Timer (service), m_ReceivedData (nullptr), m_ReceivedDataLen (0)
|
||||||
{
|
{
|
||||||
@ -96,7 +96,7 @@ namespace client
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LogPrint ("BOB missing inbound address ", ecode.message ());
|
LogPrint ("BOB missing inbound address ", bytes_transferred);
|
||||||
delete socket;
|
delete socket;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -127,7 +127,7 @@ namespace client
|
|||||||
}
|
}
|
||||||
|
|
||||||
BOBI2POutboundTunnel::BOBI2POutboundTunnel (boost::asio::io_service& service, const std::string& address, int port,
|
BOBI2POutboundTunnel::BOBI2POutboundTunnel (boost::asio::io_service& service, const std::string& address, int port,
|
||||||
ClientDestination * localDestination, bool quiet): I2PTunnel (service, localDestination),
|
ClientDestination * localDestination, bool quiet): BOBI2PTunnel (service, localDestination),
|
||||||
m_Endpoint (boost::asio::ip::address::from_string (address), port), m_IsQuiet (quiet)
|
m_Endpoint (boost::asio::ip::address::from_string (address), port), m_IsQuiet (quiet)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -280,7 +280,7 @@ namespace client
|
|||||||
#endif
|
#endif
|
||||||
Send (len);
|
Send (len);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BOBCommandSession::SendVersion ()
|
void BOBCommandSession::SendVersion ()
|
||||||
{
|
{
|
||||||
size_t len = strlen (BOB_VERSION);
|
size_t len = strlen (BOB_VERSION);
|
||||||
@ -288,6 +288,16 @@ namespace client
|
|||||||
Send (len);
|
Send (len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BOBCommandSession::SendData (const char * nickname)
|
||||||
|
{
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
size_t len = sprintf_s (m_SendBuffer, BOB_COMMAND_BUFFER_SIZE, BOB_DATA, nickname);
|
||||||
|
#else
|
||||||
|
size_t len = snprintf (m_SendBuffer, BOB_COMMAND_BUFFER_SIZE, BOB_DATA, nickname);
|
||||||
|
#endif
|
||||||
|
Send (len);
|
||||||
|
}
|
||||||
|
|
||||||
void BOBCommandSession::ZapCommandHandler (const char * operand, size_t len)
|
void BOBCommandSession::ZapCommandHandler (const char * operand, size_t len)
|
||||||
{
|
{
|
||||||
LogPrint (eLogDebug, "BOB: zap");
|
LogPrint (eLogDebug, "BOB: zap");
|
||||||
@ -305,7 +315,7 @@ namespace client
|
|||||||
{
|
{
|
||||||
LogPrint (eLogDebug, "BOB: start ", m_Nickname);
|
LogPrint (eLogDebug, "BOB: start ", m_Nickname);
|
||||||
auto dest = context.CreateNewLocalDestination (m_Keys, true);
|
auto dest = context.CreateNewLocalDestination (m_Keys, true);
|
||||||
I2PTunnel * tunnel = nullptr;
|
BOBI2PTunnel * tunnel = nullptr;
|
||||||
if (m_IsOutbound)
|
if (m_IsOutbound)
|
||||||
tunnel = new BOBI2POutboundTunnel (m_Owner.GetService (), m_Address, m_Port, dest, m_IsQuiet);
|
tunnel = new BOBI2POutboundTunnel (m_Owner.GetService (), m_Address, m_Port, dest, m_IsQuiet);
|
||||||
else
|
else
|
||||||
@ -442,6 +452,21 @@ namespace client
|
|||||||
SendReplyOK ("cleared");
|
SendReplyOK ("cleared");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BOBCommandSession::ListCommandHandler (const char * operand, size_t len)
|
||||||
|
{
|
||||||
|
LogPrint (eLogDebug, "BOB: list");
|
||||||
|
auto& tunnels = m_Owner.GetTunnels ();
|
||||||
|
for (auto it: tunnels)
|
||||||
|
SendData (it.first.c_str ());
|
||||||
|
SendReplyOK ("Listing done");
|
||||||
|
}
|
||||||
|
|
||||||
|
void BOBCommandSession::OptionCommandHandler (const char * operand, size_t len)
|
||||||
|
{
|
||||||
|
LogPrint (eLogDebug, "BOB: option ", operand);
|
||||||
|
SendReplyOK ("option");
|
||||||
|
}
|
||||||
|
|
||||||
BOBCommandChannel::BOBCommandChannel (int port):
|
BOBCommandChannel::BOBCommandChannel (int port):
|
||||||
m_IsRunning (false), m_Thread (nullptr),
|
m_IsRunning (false), m_Thread (nullptr),
|
||||||
m_Acceptor (m_Service, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port))
|
m_Acceptor (m_Service, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port))
|
||||||
@ -464,6 +489,8 @@ namespace client
|
|||||||
m_CommandHandlers[BOB_COMMAND_QUIET] = &BOBCommandSession::QuietCommandHandler;
|
m_CommandHandlers[BOB_COMMAND_QUIET] = &BOBCommandSession::QuietCommandHandler;
|
||||||
m_CommandHandlers[BOB_COMMAND_LOOKUP] = &BOBCommandSession::LookupCommandHandler;
|
m_CommandHandlers[BOB_COMMAND_LOOKUP] = &BOBCommandSession::LookupCommandHandler;
|
||||||
m_CommandHandlers[BOB_COMMAND_CLEAR] = &BOBCommandSession::ClearCommandHandler;
|
m_CommandHandlers[BOB_COMMAND_CLEAR] = &BOBCommandSession::ClearCommandHandler;
|
||||||
|
m_CommandHandlers[BOB_COMMAND_LIST] = &BOBCommandSession::ListCommandHandler;
|
||||||
|
m_CommandHandlers[BOB_COMMAND_OPTION] = &BOBCommandSession::OptionCommandHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOBCommandChannel::~BOBCommandChannel ()
|
BOBCommandChannel::~BOBCommandChannel ()
|
||||||
@ -509,12 +536,12 @@ namespace client
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BOBCommandChannel::AddTunnel (const std::string& name, I2PTunnel * tunnel)
|
void BOBCommandChannel::AddTunnel (const std::string& name, BOBI2PTunnel * tunnel)
|
||||||
{
|
{
|
||||||
m_Tunnels[name] = tunnel;
|
m_Tunnels[name] = tunnel;
|
||||||
}
|
}
|
||||||
|
|
||||||
I2PTunnel * BOBCommandChannel::FindTunnel (const std::string& name)
|
BOBI2PTunnel * BOBCommandChannel::FindTunnel (const std::string& name)
|
||||||
{
|
{
|
||||||
auto it = m_Tunnels.find (name);
|
auto it = m_Tunnels.find (name);
|
||||||
if (it != m_Tunnels.end ())
|
if (it != m_Tunnels.end ())
|
||||||
|
38
BOB.h
38
BOB.h
@ -32,13 +32,27 @@ namespace client
|
|||||||
const char BOB_COMMAND_INPORT[] = "inport";
|
const char BOB_COMMAND_INPORT[] = "inport";
|
||||||
const char BOB_COMMAND_QUIET[] = "quiet";
|
const char BOB_COMMAND_QUIET[] = "quiet";
|
||||||
const char BOB_COMMAND_LOOKUP[] = "lookup";
|
const char BOB_COMMAND_LOOKUP[] = "lookup";
|
||||||
const char BOB_COMMAND_CLEAR[] = "clear";
|
const char BOB_COMMAND_CLEAR[] = "clear";
|
||||||
|
const char BOB_COMMAND_LIST[] = "list";
|
||||||
|
const char BOB_COMMAND_OPTION[] = "option";
|
||||||
|
|
||||||
const char BOB_VERSION[] = "BOB 00.00.10\nOK\n";
|
const char BOB_VERSION[] = "BOB 00.00.10\nOK\n";
|
||||||
const char BOB_REPLY_OK[] = "OK %s\n";
|
const char BOB_REPLY_OK[] = "OK %s\n";
|
||||||
const char BOB_REPLY_ERROR[] = "ERROR %s\n";
|
const char BOB_REPLY_ERROR[] = "ERROR %s\n";
|
||||||
|
const char BOB_DATA[] = "NICKNAME %s\n";
|
||||||
|
|
||||||
class BOBI2PInboundTunnel: public I2PTunnel
|
class BOBI2PTunnel: public I2PTunnel
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
BOBI2PTunnel (boost::asio::io_service& service, ClientDestination * localDestination):
|
||||||
|
I2PTunnel (service, localDestination) {};
|
||||||
|
|
||||||
|
virtual void Start () {};
|
||||||
|
virtual void Stop () {};
|
||||||
|
};
|
||||||
|
|
||||||
|
class BOBI2PInboundTunnel: public BOBI2PTunnel
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -70,7 +84,7 @@ namespace client
|
|||||||
size_t m_ReceivedDataLen;
|
size_t m_ReceivedDataLen;
|
||||||
};
|
};
|
||||||
|
|
||||||
class BOBI2POutboundTunnel: public I2PTunnel
|
class BOBI2POutboundTunnel: public BOBI2PTunnel
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -123,6 +137,8 @@ namespace client
|
|||||||
void QuietCommandHandler (const char * operand, size_t len);
|
void QuietCommandHandler (const char * operand, size_t len);
|
||||||
void LookupCommandHandler (const char * operand, size_t len);
|
void LookupCommandHandler (const char * operand, size_t len);
|
||||||
void ClearCommandHandler (const char * operand, size_t len);
|
void ClearCommandHandler (const char * operand, size_t len);
|
||||||
|
void ListCommandHandler (const char * operand, size_t len);
|
||||||
|
void OptionCommandHandler (const char * operand, size_t len);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
@ -133,7 +149,7 @@ namespace client
|
|||||||
void HandleSent (const boost::system::error_code& ecode, std::size_t bytes_transferred);
|
void HandleSent (const boost::system::error_code& ecode, std::size_t bytes_transferred);
|
||||||
void SendReplyOK (const char * msg);
|
void SendReplyOK (const char * msg);
|
||||||
void SendReplyError (const char * msg);
|
void SendReplyError (const char * msg);
|
||||||
|
void SendData (const char * nickname);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
@ -159,9 +175,8 @@ namespace client
|
|||||||
void Stop ();
|
void Stop ();
|
||||||
|
|
||||||
boost::asio::io_service& GetService () { return m_Service; };
|
boost::asio::io_service& GetService () { return m_Service; };
|
||||||
std::map<std::string, BOBCommandHandler>& GetCommandHandlers () { return m_CommandHandlers; };
|
void AddTunnel (const std::string& name, BOBI2PTunnel * tunnel);
|
||||||
void AddTunnel (const std::string& name, I2PTunnel * tunnel);
|
BOBI2PTunnel * FindTunnel (const std::string& name);
|
||||||
I2PTunnel * FindTunnel (const std::string& name);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
@ -175,8 +190,13 @@ namespace client
|
|||||||
std::thread * m_Thread;
|
std::thread * m_Thread;
|
||||||
boost::asio::io_service m_Service;
|
boost::asio::io_service m_Service;
|
||||||
boost::asio::ip::tcp::acceptor m_Acceptor;
|
boost::asio::ip::tcp::acceptor m_Acceptor;
|
||||||
std::map<std::string, I2PTunnel *> m_Tunnels;
|
std::map<std::string, BOBI2PTunnel *> m_Tunnels;
|
||||||
std::map<std::string, BOBCommandHandler> m_CommandHandlers;
|
std::map<std::string, BOBCommandHandler> m_CommandHandlers;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
const decltype(m_CommandHandlers)& GetCommandHandlers () const { return m_CommandHandlers; };
|
||||||
|
const decltype(m_Tunnels)& GetTunnels () const { return m_Tunnels; };
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -62,9 +62,6 @@ namespace client
|
|||||||
m_Service (service), m_LocalDestination (localDestination) {};
|
m_Service (service), m_LocalDestination (localDestination) {};
|
||||||
virtual ~I2PTunnel () { ClearConnections (); };
|
virtual ~I2PTunnel () { ClearConnections (); };
|
||||||
|
|
||||||
virtual void Start () {};
|
|
||||||
virtual void Stop () {};
|
|
||||||
|
|
||||||
void AddConnection (std::shared_ptr<I2PTunnelConnection> conn);
|
void AddConnection (std::shared_ptr<I2PTunnelConnection> conn);
|
||||||
void RemoveConnection (std::shared_ptr<I2PTunnelConnection> conn);
|
void RemoveConnection (std::shared_ptr<I2PTunnelConnection> conn);
|
||||||
void ClearConnections ();
|
void ClearConnections ();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user